@rpg-engine/long-bow 0.4.9 → 0.4.81

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 (177) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/components/Marketplace/BuyPanel.d.ts +0 -1
  4. package/dist/components/Marketplace/ManagmentPanel.d.ts +0 -1
  5. package/dist/components/ProgressBar.d.ts +1 -0
  6. package/dist/long-bow.cjs.development.js +1566 -1595
  7. package/dist/long-bow.cjs.development.js.map +1 -1
  8. package/dist/long-bow.cjs.production.min.js +1 -1
  9. package/dist/long-bow.cjs.production.min.js.map +1 -1
  10. package/dist/long-bow.esm.js +1472 -1501
  11. package/dist/long-bow.esm.js.map +1 -1
  12. package/package.json +100 -100
  13. package/src/.DS_Store +0 -0
  14. package/src/components/.DS_Store +0 -0
  15. package/src/components/Abstractions/ModalPortal.tsx +22 -22
  16. package/src/components/Abstractions/SlotsContainer.tsx +62 -62
  17. package/src/components/Arrow/SelectArrow.tsx +69 -69
  18. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  19. package/src/components/Arrow/img/arrow01-left.png +0 -0
  20. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  21. package/src/components/Arrow/img/arrow01-right.png +0 -0
  22. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  23. package/src/components/Arrow/img/arrow02-left.png +0 -0
  24. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  25. package/src/components/Arrow/img/arrow02-right.png +0 -0
  26. package/src/components/Button.tsx +40 -40
  27. package/src/components/Character/CharacterSelection.tsx +98 -98
  28. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  29. package/src/components/Chat/Chat.tsx +196 -196
  30. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  31. package/src/components/CheckButton.tsx +65 -65
  32. package/src/components/CircularController/CircularController.tsx +282 -282
  33. package/src/components/ConfirmModal.tsx +87 -87
  34. package/src/components/CraftBook/CraftBook.tsx +286 -286
  35. package/src/components/CraftBook/CraftingRecipe.tsx +161 -161
  36. package/src/components/CraftBook/MockItems.ts +101 -101
  37. package/src/components/DraggableContainer.tsx +183 -183
  38. package/src/components/Dropdown.tsx +114 -114
  39. package/src/components/DropdownSelectorContainer.tsx +42 -42
  40. package/src/components/Equipment/EquipmentSet.tsx +199 -199
  41. package/src/components/HistoryDialog.tsx +104 -104
  42. package/src/components/Input.tsx +15 -15
  43. package/src/components/InputRadio.tsx +41 -41
  44. package/src/components/Item/Cards/ItemInfo.tsx +298 -298
  45. package/src/components/Item/Cards/ItemInfoDisplay.tsx +135 -135
  46. package/src/components/Item/Cards/ItemInfoWrapper.tsx +62 -62
  47. package/src/components/Item/Cards/ItemTooltip.tsx +83 -83
  48. package/src/components/Item/Cards/MobileItemTooltip.tsx +149 -149
  49. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  50. package/src/components/Item/Inventory/ItemContainer.tsx +231 -231
  51. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  52. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  53. package/src/components/Item/Inventory/ItemSlot.tsx +595 -595
  54. package/src/components/Item/Inventory/itemContainerHelper.ts +175 -175
  55. package/src/components/ListMenu.tsx +63 -63
  56. package/src/components/Marketplace/BuyPanel.tsx +296 -304
  57. package/src/components/Marketplace/ManagmentPanel.tsx +247 -255
  58. package/src/components/Marketplace/Marketplace.tsx +106 -106
  59. package/src/components/Marketplace/MarketplaceRows.tsx +161 -177
  60. package/src/components/Marketplace/filters/index.tsx +67 -67
  61. package/src/components/Multitab/Tab.tsx +66 -66
  62. package/src/components/Multitab/TabBody.tsx +13 -13
  63. package/src/components/Multitab/TabsContainer.tsx +97 -97
  64. package/src/components/NPCDialog/.DS_Store +0 -0
  65. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  66. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  67. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  68. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  69. package/src/components/NPCDialog/img/.DS_Store +0 -0
  70. package/src/components/Pager.tsx +94 -94
  71. package/src/components/ProgressBar.tsx +102 -95
  72. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  73. package/src/components/QuestInfo/QuestInfo.tsx +233 -233
  74. package/src/components/QuestList.tsx +135 -135
  75. package/src/components/RPGUIContainer.tsx +47 -47
  76. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  77. package/src/components/RPGUIRoot.tsx +14 -14
  78. package/src/components/RadioButton.tsx +53 -53
  79. package/src/components/RadioInput/RadioButton.tsx +96 -96
  80. package/src/components/RadioInput/RadioInput.tsx +102 -102
  81. package/src/components/RadioInput/instruments.ts +15 -15
  82. package/src/components/RangeSlider.tsx +78 -78
  83. package/src/components/RelativeListMenu.tsx +90 -90
  84. package/src/components/ScrollList.tsx +79 -79
  85. package/src/components/Shortcuts/Shortcuts.tsx +193 -193
  86. package/src/components/Shortcuts/ShortcutsSetter.tsx +139 -139
  87. package/src/components/Shortcuts/SingleShortcut.ts +82 -82
  88. package/src/components/Shortcuts/useShortcutCooldown.ts +23 -23
  89. package/src/components/SimpleProgressBar.tsx +62 -62
  90. package/src/components/SkillProgressBar.tsx +198 -198
  91. package/src/components/SkillsContainer.tsx +213 -213
  92. package/src/components/Spellbook/Spell.tsx +235 -235
  93. package/src/components/Spellbook/Spellbook.tsx +145 -145
  94. package/src/components/Spellbook/cards/MobileSpellTooltip.tsx +137 -137
  95. package/src/components/Spellbook/cards/SpellInfo.tsx +134 -134
  96. package/src/components/Spellbook/cards/SpellInfoDisplay.tsx +31 -31
  97. package/src/components/Spellbook/cards/SpellInfoWrapper.tsx +48 -48
  98. package/src/components/Spellbook/cards/SpellTooltip.tsx +70 -70
  99. package/src/components/Spellbook/constants.ts +7 -7
  100. package/src/components/Spellbook/mockSpells.ts +84 -84
  101. package/src/components/StaticBook/StaticBook.tsx +103 -103
  102. package/src/components/TextArea.tsx +11 -11
  103. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  104. package/src/components/TimeWidget/TimeWidget.tsx +65 -65
  105. package/src/components/TradingMenu/TradingItemRow.tsx +199 -199
  106. package/src/components/TradingMenu/TradingMenu.tsx +219 -219
  107. package/src/components/TradingMenu/items.mock.ts +48 -48
  108. package/src/components/Truncate.tsx +25 -25
  109. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  110. package/src/components/shared/Column.tsx +16 -16
  111. package/src/components/shared/Ellipsis.tsx +76 -76
  112. package/src/components/shared/SpriteFromAtlas.tsx +104 -104
  113. package/src/components/typography/DynamicText.tsx +49 -49
  114. package/src/constants/uiColors.ts +20 -20
  115. package/src/constants/uiDevices.ts +3 -3
  116. package/src/constants/uiFonts.ts +12 -12
  117. package/src/hooks/useEventListener.ts +21 -21
  118. package/src/hooks/useOutsideAlerter.ts +25 -25
  119. package/src/index.tsx +42 -42
  120. package/src/libs/CastingTypeHelper.ts +7 -7
  121. package/src/libs/StringHelpers.ts +3 -3
  122. package/src/libs/itemCounter.ts +21 -21
  123. package/src/mocks/.DS_Store +0 -0
  124. package/src/mocks/atlas/.DS_Store +0 -0
  125. package/src/mocks/atlas/entities/entities.json +20215 -20215
  126. package/src/mocks/atlas/icons/icons.json +735 -735
  127. package/src/mocks/atlas/items/items.json +12086 -12086
  128. package/src/mocks/equipmentSet.mocks.ts +391 -391
  129. package/src/mocks/itemContainer.mocks.ts +605 -605
  130. package/src/mocks/skills.mocks.ts +130 -130
  131. package/src/stories/Arrow.stories.tsx +26 -26
  132. package/src/stories/Button.stories.tsx +36 -36
  133. package/src/stories/CharacterSelection.stories.tsx +44 -44
  134. package/src/stories/CharacterStatus.stories.tsx +29 -29
  135. package/src/stories/Chat.stories.tsx +187 -187
  136. package/src/stories/ChatDeprecated.stories.tsx +170 -170
  137. package/src/stories/CheckButton.stories.tsx +48 -48
  138. package/src/stories/CircullarController.stories.tsx +37 -37
  139. package/src/stories/CraftBook.stories.tsx +42 -42
  140. package/src/stories/DayNightPeriod.stories.tsx +27 -27
  141. package/src/stories/DraggableContainer.stories.tsx +28 -28
  142. package/src/stories/Dropdown.stories.tsx +46 -46
  143. package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
  144. package/src/stories/EquipmentSet.stories.tsx +65 -65
  145. package/src/stories/HistoryDialog.stories.tsx +61 -61
  146. package/src/stories/ItemContainer.stories.tsx +201 -201
  147. package/src/stories/ItemInfoDisplay.stories.tsx +33 -33
  148. package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
  149. package/src/stories/ItemSelector.stories.tsx +77 -77
  150. package/src/stories/ItemTradingComponent.stories.tsx +35 -35
  151. package/src/stories/ListMenu.stories.tsx +56 -56
  152. package/src/stories/Marketplace.stories.tsx +53 -57
  153. package/src/stories/MarketplaceRows.stories.tsx +27 -27
  154. package/src/stories/Multitab.stories.tsx +51 -51
  155. package/src/stories/NPCDialog.stories.tsx +130 -130
  156. package/src/stories/NPCMultiDialog.stories.tsx +71 -71
  157. package/src/stories/ProgressBar.stories.tsx +24 -23
  158. package/src/stories/PropertySelect.stories.tsx +40 -40
  159. package/src/stories/QuestInfo.stories.tsx +107 -107
  160. package/src/stories/QuestList.stories.tsx +82 -82
  161. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  162. package/src/stories/RadioButton.stories.tsx +49 -49
  163. package/src/stories/RadioInput.stories.tsx +34 -34
  164. package/src/stories/RangeSlider.stories.tsx +64 -64
  165. package/src/stories/ScrollList.stories.tsx +85 -85
  166. package/src/stories/Shortcuts.stories.tsx +39 -39
  167. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  168. package/src/stories/SkillProgressBar.stories.tsx +34 -34
  169. package/src/stories/SkillsContainer.stories.tsx +35 -35
  170. package/src/stories/SpellInfoDisplay.stories.tsx +27 -27
  171. package/src/stories/Spellbook.stories.tsx +104 -104
  172. package/src/stories/StaticBook.stories.tsx +32 -32
  173. package/src/stories/Text.stories.tsx +42 -42
  174. package/src/stories/TimeWidget.stories.tsx +27 -27
  175. package/src/stories/TradingMenu.stories.tsx +47 -47
  176. package/src/types/eventTypes.ts +4 -4
  177. package/src/types/index.d.ts +2 -2
@@ -1,255 +1,247 @@
1
- import { IEquipmentSet, IItem, IMarketplaceItem } from '@rpg-engine/shared';
2
- import React, { useEffect, useRef, useState } from 'react';
3
- import styled from 'styled-components';
4
- import { uiColors } from '../../constants/uiColors';
5
- import { uiFonts } from '../../constants/uiFonts';
6
- import { Button, ButtonTypes } from '../Button';
7
- import { ConfirmModal } from '../ConfirmModal';
8
- import { Input } from '../Input';
9
- import { ItemSlot } from '../Item/Inventory/ItemSlot';
10
- import { MarketplaceRows } from './MarketplaceRows';
11
-
12
- export interface IManagmentPanelProps {
13
- items: IMarketplaceItem[];
14
- atlasJSON: any;
15
- atlasIMG: any;
16
- onChangeNameInput: (value: string) => void;
17
- equipmentSet?: IEquipmentSet | null;
18
- availableGold: number;
19
- onMarketPlaceItemRemove?: (marketPlaceItemId: string) => void;
20
- selectedItemToSell: IItem | null;
21
- onSelectedItemToSellRemove: (item: IItem) => void;
22
- onAddItemToMarketplace: (item: IItem, price: number) => void;
23
- enableHotkeys?: () => void;
24
- disableHotkeys?: () => void;
25
- onMoneyWithdraw: () => void;
26
- currentPage: number;
27
- }
28
-
29
- export const ManagmentPanel: React.FC<IManagmentPanelProps> = ({
30
- items,
31
- atlasIMG,
32
- atlasJSON,
33
- onChangeNameInput,
34
- equipmentSet,
35
- availableGold,
36
- onMarketPlaceItemRemove,
37
- selectedItemToSell,
38
- onSelectedItemToSellRemove,
39
- onAddItemToMarketplace,
40
- enableHotkeys,
41
- disableHotkeys,
42
- onMoneyWithdraw,
43
- currentPage,
44
- }) => {
45
- const [name, setName] = useState('');
46
- const [price, setPrice] = useState('');
47
- const [isCreatingOffer, setIsCreatingOffer] = useState(false);
48
- const [removingItemId, setRemovingItemId] = useState<string | null>(null);
49
-
50
- const itemsContainer = useRef<HTMLDivElement>(null);
51
-
52
- useEffect(() => {
53
- itemsContainer.current?.scrollTo(0, 0);
54
- }, [currentPage]);
55
-
56
- return (
57
- <>
58
- {isCreatingOffer && (
59
- <ConfirmModal
60
- onClose={setIsCreatingOffer.bind(null, false)}
61
- onConfirm={() => {
62
- if (selectedItemToSell && price && Number(price)) {
63
- onAddItemToMarketplace(selectedItemToSell, Number(price));
64
- setPrice('');
65
- onSelectedItemToSellRemove(selectedItemToSell);
66
- setIsCreatingOffer(false);
67
- enableHotkeys?.();
68
- }
69
- }}
70
- message="Are you sure to create this offer?"
71
- />
72
- )}
73
- {removingItemId && (
74
- <ConfirmModal
75
- onClose={setRemovingItemId.bind(null, null)}
76
- onConfirm={() => {
77
- onMarketPlaceItemRemove?.(removingItemId);
78
- setRemovingItemId(null);
79
- enableHotkeys?.();
80
- }}
81
- message="Are you sure to remove this item?"
82
- />
83
- )}
84
- <InputWrapper>
85
- <p>Search By Name</p>
86
- <Input
87
- onChange={e => {
88
- setName(e.target.value);
89
- onChangeNameInput(e.target.value);
90
- }}
91
- value={name}
92
- placeholder="Enter name..."
93
- onBlur={enableHotkeys}
94
- onFocus={disableHotkeys}
95
- />
96
- </InputWrapper>
97
-
98
- <OptionsWrapper>
99
- <InnerOptionsWrapper>
100
- <SellDescription>
101
- Click on item in inventory to sell it
102
- </SellDescription>
103
- <Flex>
104
- <ItemSlot
105
- slotIndex={0}
106
- atlasIMG={atlasIMG}
107
- atlasJSON={atlasJSON}
108
- onPointerDown={(_, __, item) => onSelectedItemToSellRemove(item)}
109
- item={selectedItemToSell}
110
- />
111
- <PriceInputWrapper>
112
- <p>Enter price</p>
113
- <Flex>
114
- <Input
115
- onChange={e => {
116
- setPrice(e.target.value);
117
- }}
118
- value={price}
119
- placeholder="Enter price..."
120
- type="number"
121
- disabled={!selectedItemToSell}
122
- onBlur={enableHotkeys}
123
- onFocus={disableHotkeys}
124
- />
125
- <Button
126
- buttonType={ButtonTypes.RPGUIButton}
127
- disabled={!selectedItemToSell || !price}
128
- onPointerDown={() => {
129
- if (selectedItemToSell && price && Number(price)) {
130
- setIsCreatingOffer(true);
131
- }
132
- }}
133
- >
134
- Create offer
135
- </Button>
136
- </Flex>
137
- </PriceInputWrapper>
138
- </Flex>
139
- </InnerOptionsWrapper>
140
- <InnerOptionsWrapper>
141
- <AvailableGold $disabled={availableGold === 0}>
142
- <p>Available gold</p>
143
- <p className="center">${availableGold}</p>
144
- <Button
145
- buttonType={ButtonTypes.RPGUIButton}
146
- disabled={availableGold === 0}
147
- onPointerDown={() => availableGold > 0 && onMoneyWithdraw()}
148
- >
149
- Withdraw
150
- </Button>
151
- </AvailableGold>
152
- </InnerOptionsWrapper>
153
- </OptionsWrapper>
154
-
155
- <ItemComponentScrollWrapper id="MarketContainer" ref={itemsContainer}>
156
- {items?.map(({ item, price, _id }, index) => (
157
- <MarketplaceRows
158
- key={`${item.key}_${index}`}
159
- atlasIMG={atlasIMG}
160
- atlasJSON={atlasJSON}
161
- item={item}
162
- itemPrice={price}
163
- equipmentSet={equipmentSet}
164
- onMarketPlaceItemRemove={setRemovingItemId.bind(null, _id)}
165
- />
166
- ))}
167
- </ItemComponentScrollWrapper>
168
- </>
169
- );
170
- };
171
-
172
- const Flex = styled.div`
173
- display: flex;
174
- gap: 5px;
175
- align-items: center;
176
- `;
177
-
178
- const InputWrapper = styled.div`
179
- width: 95%;
180
- display: flex !important;
181
- justify-content: flex-start;
182
- align-items: center;
183
- margin: auto;
184
-
185
- p {
186
- width: auto;
187
- margin-right: 20px;
188
- }
189
-
190
- input {
191
- width: 68%;
192
- height: 10px;
193
- }
194
- `;
195
-
196
- const OptionsWrapper = styled.div`
197
- width: 100%;
198
- height: 100px;
199
- display: flex;
200
- align-items: center;
201
- justify-content: space-around;
202
- `;
203
-
204
- const InnerOptionsWrapper = styled.div`
205
- display: flex;
206
- justify-content: space-between;
207
- flex-direction: column;
208
- height: 100%;
209
- `;
210
-
211
- const ItemComponentScrollWrapper = styled.div`
212
- overflow-y: scroll;
213
- height: 390px;
214
- width: 100%;
215
- margin-top: 1rem;
216
-
217
- @media (max-width: 950px) {
218
- height: 250px;
219
- }
220
- `;
221
-
222
- const PriceInputWrapper = styled.div`
223
- p {
224
- margin: 0;
225
- }
226
-
227
- input {
228
- width: 200px;
229
- }
230
- `;
231
-
232
- const SellDescription = styled.p`
233
- margin: 0;
234
- font-size: ${uiFonts.size.xsmall} !important;
235
- `;
236
-
237
- const AvailableGold = styled.div<{ $disabled: boolean }>`
238
- height: 100%;
239
- display: flex;
240
- flex-direction: column;
241
- justify-content: space-between;
242
-
243
- p {
244
- margin: 0;
245
- color: ${props =>
246
- props.$disabled ? uiColors.lightGray : 'white'} !important;
247
- }
248
-
249
- .center {
250
- text-align: center;
251
- font-size: ${uiFonts.size.large} !important;
252
- color: ${props =>
253
- props.$disabled ? uiColors.lightGray : uiColors.lightGreen} !important;
254
- }
255
- `;
1
+ import { IEquipmentSet, IItem, IMarketplaceItem } from '@rpg-engine/shared';
2
+ import React, { useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import { uiColors } from '../../constants/uiColors';
5
+ import { uiFonts } from '../../constants/uiFonts';
6
+ import { Button, ButtonTypes } from '../Button';
7
+ import { ConfirmModal } from '../ConfirmModal';
8
+ import { Input } from '../Input';
9
+ import { ItemSlot } from '../Item/Inventory/ItemSlot';
10
+ import { MarketplaceRows } from './MarketplaceRows';
11
+
12
+ export interface IManagmentPanelProps {
13
+ items: IMarketplaceItem[];
14
+ atlasJSON: any;
15
+ atlasIMG: any;
16
+ onChangeNameInput: (value: string) => void;
17
+ equipmentSet?: IEquipmentSet | null;
18
+ availableGold: number;
19
+ onMarketPlaceItemRemove?: (marketPlaceItemId: string) => void;
20
+ selectedItemToSell: IItem | null;
21
+ onSelectedItemToSellRemove: (item: IItem) => void;
22
+ onAddItemToMarketplace: (item: IItem, price: number) => void;
23
+ enableHotkeys?: () => void;
24
+ disableHotkeys?: () => void;
25
+ onMoneyWithdraw: () => void;
26
+ }
27
+
28
+ export const ManagmentPanel: React.FC<IManagmentPanelProps> = ({
29
+ items,
30
+ atlasIMG,
31
+ atlasJSON,
32
+ onChangeNameInput,
33
+ equipmentSet,
34
+ availableGold,
35
+ onMarketPlaceItemRemove,
36
+ selectedItemToSell,
37
+ onSelectedItemToSellRemove,
38
+ onAddItemToMarketplace,
39
+ enableHotkeys,
40
+ disableHotkeys,
41
+ onMoneyWithdraw,
42
+ }) => {
43
+ const [name, setName] = useState('');
44
+ const [price, setPrice] = useState('');
45
+ const [isCreatingOffer, setIsCreatingOffer] = useState(false);
46
+ const [removingItemId, setRemovingItemId] = useState<string | null>(null);
47
+
48
+ return (
49
+ <>
50
+ {isCreatingOffer && (
51
+ <ConfirmModal
52
+ onClose={setIsCreatingOffer.bind(null, false)}
53
+ onConfirm={() => {
54
+ if (selectedItemToSell && price && Number(price)) {
55
+ onAddItemToMarketplace(selectedItemToSell, Number(price));
56
+ setPrice('');
57
+ onSelectedItemToSellRemove(selectedItemToSell);
58
+ setIsCreatingOffer(false);
59
+ enableHotkeys?.();
60
+ }
61
+ }}
62
+ message="Are you sure to create this offer?"
63
+ />
64
+ )}
65
+ {removingItemId && (
66
+ <ConfirmModal
67
+ onClose={setRemovingItemId.bind(null, null)}
68
+ onConfirm={() => {
69
+ onMarketPlaceItemRemove?.(removingItemId);
70
+ setRemovingItemId(null);
71
+ enableHotkeys?.();
72
+ }}
73
+ message="Are you sure to remove this item?"
74
+ />
75
+ )}
76
+ <InputWrapper>
77
+ <p>Search By Name</p>
78
+ <Input
79
+ onChange={e => {
80
+ setName(e.target.value);
81
+ onChangeNameInput(e.target.value);
82
+ }}
83
+ value={name}
84
+ placeholder="Enter name..."
85
+ onBlur={enableHotkeys}
86
+ onFocus={disableHotkeys}
87
+ />
88
+ </InputWrapper>
89
+
90
+ <OptionsWrapper>
91
+ <InnerOptionsWrapper>
92
+ <SellDescription>
93
+ Click on item in inventory to sell it
94
+ </SellDescription>
95
+ <Flex>
96
+ <ItemSlot
97
+ slotIndex={0}
98
+ atlasIMG={atlasIMG}
99
+ atlasJSON={atlasJSON}
100
+ onPointerDown={(_, __, item) => onSelectedItemToSellRemove(item)}
101
+ item={selectedItemToSell}
102
+ />
103
+ <PriceInputWrapper>
104
+ <p>Enter price</p>
105
+ <Flex>
106
+ <Input
107
+ onChange={e => {
108
+ setPrice(e.target.value);
109
+ }}
110
+ value={price}
111
+ placeholder="Enter price..."
112
+ type="number"
113
+ disabled={!selectedItemToSell}
114
+ onBlur={enableHotkeys}
115
+ onFocus={disableHotkeys}
116
+ />
117
+ <Button
118
+ buttonType={ButtonTypes.RPGUIButton}
119
+ disabled={!selectedItemToSell || !price}
120
+ onPointerDown={() => {
121
+ if (selectedItemToSell && price && Number(price)) {
122
+ setIsCreatingOffer(true);
123
+ }
124
+ }}
125
+ >
126
+ Create offer
127
+ </Button>
128
+ </Flex>
129
+ </PriceInputWrapper>
130
+ </Flex>
131
+ </InnerOptionsWrapper>
132
+ <InnerOptionsWrapper>
133
+ <AvailableGold $disabled={availableGold === 0}>
134
+ <p>Available gold</p>
135
+ <p className="center">${availableGold}</p>
136
+ <Button
137
+ buttonType={ButtonTypes.RPGUIButton}
138
+ disabled={availableGold === 0}
139
+ onPointerDown={() => availableGold > 0 && onMoneyWithdraw()}
140
+ >
141
+ Withdraw
142
+ </Button>
143
+ </AvailableGold>
144
+ </InnerOptionsWrapper>
145
+ </OptionsWrapper>
146
+
147
+ <ItemComponentScrollWrapper id="MarketContainer">
148
+ {items?.map(({ item, price, _id }, index) => (
149
+ <MarketplaceRows
150
+ key={`${item.key}_${index}`}
151
+ atlasIMG={atlasIMG}
152
+ atlasJSON={atlasJSON}
153
+ item={item}
154
+ itemPrice={price}
155
+ equipmentSet={equipmentSet}
156
+ onMarketPlaceItemRemove={setRemovingItemId.bind(null, _id)}
157
+ />
158
+ ))}
159
+ </ItemComponentScrollWrapper>
160
+ </>
161
+ );
162
+ };
163
+
164
+ const Flex = styled.div`
165
+ display: flex;
166
+ gap: 5px;
167
+ align-items: center;
168
+ `;
169
+
170
+ const InputWrapper = styled.div`
171
+ width: 95%;
172
+ display: flex !important;
173
+ justify-content: flex-start;
174
+ align-items: center;
175
+ margin: auto;
176
+
177
+ p {
178
+ width: auto;
179
+ margin-right: 20px;
180
+ }
181
+
182
+ input {
183
+ width: 68%;
184
+ height: 10px;
185
+ }
186
+ `;
187
+
188
+ const OptionsWrapper = styled.div`
189
+ width: 100%;
190
+ height: 100px;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: space-around;
194
+ `;
195
+
196
+ const InnerOptionsWrapper = styled.div`
197
+ display: flex;
198
+ justify-content: space-between;
199
+ flex-direction: column;
200
+ height: 100%;
201
+ `;
202
+
203
+ const ItemComponentScrollWrapper = styled.div`
204
+ overflow-y: scroll;
205
+ height: 390px;
206
+ width: 100%;
207
+ margin-top: 1rem;
208
+
209
+ @media (max-width: 950px) {
210
+ height: 250px;
211
+ }
212
+ `;
213
+
214
+ const PriceInputWrapper = styled.div`
215
+ p {
216
+ margin: 0;
217
+ }
218
+
219
+ input {
220
+ width: 200px;
221
+ }
222
+ `;
223
+
224
+ const SellDescription = styled.p`
225
+ margin: 0;
226
+ font-size: ${uiFonts.size.xsmall} !important;
227
+ `;
228
+
229
+ const AvailableGold = styled.div<{ $disabled: boolean }>`
230
+ height: 100%;
231
+ display: flex;
232
+ flex-direction: column;
233
+ justify-content: space-between;
234
+
235
+ p {
236
+ margin: 0;
237
+ color: ${props =>
238
+ props.$disabled ? uiColors.lightGray : 'white'} !important;
239
+ }
240
+
241
+ .center {
242
+ text-align: center;
243
+ font-size: ${uiFonts.size.large} !important;
244
+ color: ${props =>
245
+ props.$disabled ? uiColors.lightGray : uiColors.lightGreen} !important;
246
+ }
247
+ `;