@rpg-engine/long-bow 0.4.7 → 0.4.9

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/ConfirmModal.d.ts +8 -0
  4. package/dist/components/DraggableContainer.d.ts +1 -0
  5. package/dist/components/Item/Inventory/ItemSlot.d.ts +7 -7
  6. package/dist/components/Marketplace/BuyPanel.d.ts +23 -0
  7. package/dist/components/Marketplace/ManagmentPanel.d.ts +19 -0
  8. package/dist/components/Marketplace/Marketplace.d.ts +22 -9
  9. package/dist/components/Marketplace/MarketplaceRows.d.ts +3 -1
  10. package/dist/components/Marketplace/{__mocks__ → filters}/index.d.ts +1 -3
  11. package/dist/components/Pager.d.ts +9 -0
  12. package/dist/long-bow.cjs.development.js +1573 -1163
  13. package/dist/long-bow.cjs.development.js.map +1 -1
  14. package/dist/long-bow.cjs.production.min.js +1 -1
  15. package/dist/long-bow.cjs.production.min.js.map +1 -1
  16. package/dist/long-bow.esm.js +1629 -1219
  17. package/dist/long-bow.esm.js.map +1 -1
  18. package/package.json +100 -100
  19. package/src/components/Abstractions/ModalPortal.tsx +22 -22
  20. package/src/components/Abstractions/SlotsContainer.tsx +62 -62
  21. package/src/components/Arrow/SelectArrow.tsx +69 -69
  22. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  23. package/src/components/Arrow/img/arrow01-left.png +0 -0
  24. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  25. package/src/components/Arrow/img/arrow01-right.png +0 -0
  26. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  27. package/src/components/Arrow/img/arrow02-left.png +0 -0
  28. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  29. package/src/components/Arrow/img/arrow02-right.png +0 -0
  30. package/src/components/Button.tsx +40 -40
  31. package/src/components/Character/CharacterSelection.tsx +98 -98
  32. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  33. package/src/components/Chat/Chat.tsx +196 -196
  34. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  35. package/src/components/CheckButton.tsx +65 -65
  36. package/src/components/CircularController/CircularController.tsx +282 -282
  37. package/src/components/ConfirmModal.tsx +87 -0
  38. package/src/components/CraftBook/CraftBook.tsx +286 -286
  39. package/src/components/CraftBook/CraftingRecipe.tsx +161 -161
  40. package/src/components/CraftBook/MockItems.ts +101 -101
  41. package/src/components/DraggableContainer.tsx +183 -180
  42. package/src/components/Dropdown.tsx +114 -106
  43. package/src/components/DropdownSelectorContainer.tsx +42 -42
  44. package/src/components/Equipment/EquipmentSet.tsx +199 -199
  45. package/src/components/HistoryDialog.tsx +104 -104
  46. package/src/components/Input.tsx +15 -15
  47. package/src/components/InputRadio.tsx +41 -41
  48. package/src/components/Item/Cards/ItemInfo.tsx +298 -298
  49. package/src/components/Item/Cards/ItemInfoDisplay.tsx +135 -135
  50. package/src/components/Item/Cards/ItemInfoWrapper.tsx +62 -62
  51. package/src/components/Item/Cards/ItemTooltip.tsx +83 -83
  52. package/src/components/Item/Cards/MobileItemTooltip.tsx +149 -149
  53. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  54. package/src/components/Item/Inventory/ItemContainer.tsx +231 -231
  55. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  56. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  57. package/src/components/Item/Inventory/ItemSlot.tsx +595 -580
  58. package/src/components/Item/Inventory/itemContainerHelper.ts +175 -175
  59. package/src/components/ListMenu.tsx +63 -63
  60. package/src/components/Marketplace/BuyPanel.tsx +304 -0
  61. package/src/components/Marketplace/ManagmentPanel.tsx +255 -0
  62. package/src/components/Marketplace/Marketplace.tsx +106 -132
  63. package/src/components/Marketplace/MarketplaceRows.tsx +177 -171
  64. package/src/components/Marketplace/{__mocks__ → filters}/index.tsx +67 -65
  65. package/src/components/Multitab/Tab.tsx +66 -66
  66. package/src/components/Multitab/TabBody.tsx +13 -13
  67. package/src/components/Multitab/TabsContainer.tsx +97 -97
  68. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  69. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  70. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  71. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  72. package/src/components/Pager.tsx +94 -0
  73. package/src/components/ProgressBar.tsx +95 -95
  74. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  75. package/src/components/QuestInfo/QuestInfo.tsx +233 -233
  76. package/src/components/QuestList.tsx +135 -135
  77. package/src/components/RPGUIContainer.tsx +47 -47
  78. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  79. package/src/components/RPGUIRoot.tsx +14 -14
  80. package/src/components/RadioButton.tsx +53 -53
  81. package/src/components/RadioInput/RadioButton.tsx +96 -96
  82. package/src/components/RadioInput/RadioInput.tsx +102 -102
  83. package/src/components/RadioInput/instruments.ts +15 -15
  84. package/src/components/RangeSlider.tsx +78 -78
  85. package/src/components/RelativeListMenu.tsx +90 -90
  86. package/src/components/ScrollList.tsx +79 -79
  87. package/src/components/Shortcuts/Shortcuts.tsx +193 -193
  88. package/src/components/Shortcuts/ShortcutsSetter.tsx +139 -139
  89. package/src/components/Shortcuts/SingleShortcut.ts +82 -82
  90. package/src/components/Shortcuts/useShortcutCooldown.ts +23 -23
  91. package/src/components/SimpleProgressBar.tsx +62 -62
  92. package/src/components/SkillProgressBar.tsx +198 -198
  93. package/src/components/SkillsContainer.tsx +213 -213
  94. package/src/components/Spellbook/Spell.tsx +235 -236
  95. package/src/components/Spellbook/Spellbook.tsx +145 -161
  96. package/src/components/Spellbook/cards/MobileSpellTooltip.tsx +137 -137
  97. package/src/components/Spellbook/cards/SpellInfo.tsx +134 -134
  98. package/src/components/Spellbook/cards/SpellInfoDisplay.tsx +31 -31
  99. package/src/components/Spellbook/cards/SpellInfoWrapper.tsx +48 -48
  100. package/src/components/Spellbook/cards/SpellTooltip.tsx +70 -70
  101. package/src/components/Spellbook/constants.ts +7 -7
  102. package/src/components/Spellbook/mockSpells.ts +84 -84
  103. package/src/components/StaticBook/StaticBook.tsx +103 -103
  104. package/src/components/TextArea.tsx +11 -11
  105. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  106. package/src/components/TimeWidget/TimeWidget.tsx +65 -65
  107. package/src/components/TradingMenu/TradingItemRow.tsx +199 -199
  108. package/src/components/TradingMenu/TradingMenu.tsx +219 -219
  109. package/src/components/TradingMenu/items.mock.ts +48 -48
  110. package/src/components/Truncate.tsx +25 -25
  111. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  112. package/src/components/shared/Column.tsx +16 -16
  113. package/src/components/shared/Ellipsis.tsx +76 -68
  114. package/src/components/shared/SpriteFromAtlas.tsx +104 -104
  115. package/src/components/typography/DynamicText.tsx +49 -49
  116. package/src/constants/uiColors.ts +20 -20
  117. package/src/constants/uiDevices.ts +3 -3
  118. package/src/constants/uiFonts.ts +12 -12
  119. package/src/hooks/useEventListener.ts +21 -21
  120. package/src/hooks/useOutsideAlerter.ts +25 -25
  121. package/src/index.tsx +42 -42
  122. package/src/libs/CastingTypeHelper.ts +7 -7
  123. package/src/libs/StringHelpers.ts +3 -3
  124. package/src/libs/itemCounter.ts +21 -21
  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 +57 -42
  153. package/src/stories/MarketplaceRows.stories.tsx +27 -28
  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 +23 -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,132 +1,106 @@
1
- import { IEquipmentSet, IItem } from '@rpg-engine/shared';
2
- import React, { ChangeEvent } from 'react';
3
- import styled from 'styled-components';
4
- import { DraggableContainer } from '../DraggableContainer';
5
- import { Dropdown, IOptionsProps } from '../Dropdown';
6
- import { Input } from '../Input';
7
- import { RPGUIContainerTypes } from '../RPGUIContainer';
8
- import { MarketplaceRows } from './MarketplaceRows';
9
-
10
- export interface IMarketPlaceProps {
11
- items: IItem[] | null;
12
- atlasJSON: any;
13
- atlasIMG: any;
14
- optionsType: IOptionsProps[];
15
- optionsRarity: IOptionsProps[];
16
- optionsPrice: IOptionsProps[];
17
- onClose: () => void;
18
- onChangeType: (value: string) => void;
19
- onChangeRarity: (value: string) => void;
20
- onChangeOrder: (value: string) => void;
21
- onChangeNameInput: (event: ChangeEvent<HTMLInputElement>) => void;
22
- scale?: number;
23
- equipmentSet?: IEquipmentSet | null;
24
- onHandleClick: (value: string) => void;
25
- }
26
-
27
- export const Marketplace: React.FC<IMarketPlaceProps> = ({
28
- items,
29
- atlasIMG,
30
- atlasJSON,
31
- onClose,
32
- optionsType,
33
- optionsRarity,
34
- optionsPrice,
35
- onChangeType,
36
- onChangeRarity,
37
- onChangeOrder,
38
- onChangeNameInput,
39
- scale,
40
- equipmentSet,
41
- onHandleClick,
42
- }) => {
43
- return (
44
- <DraggableContainer
45
- type={RPGUIContainerTypes.Framed}
46
- onCloseButton={() => {
47
- if (onClose) onClose();
48
- }}
49
- width="800px"
50
- cancelDrag="#MarketContainer"
51
- scale={scale}
52
- >
53
- <>
54
- <InputWrapper>
55
- <p> Search By Name</p>
56
- <Input onChange={onChangeNameInput} placeholder={'Search...'} />
57
- </InputWrapper>
58
-
59
- <WrapperContainer>
60
- <StyledDropdown
61
- options={optionsType}
62
- onChange={onChangeType}
63
- width={'220px'}
64
- />
65
- <StyledDropdown
66
- options={optionsRarity}
67
- onChange={onChangeRarity}
68
- width={'220px'}
69
- />
70
- <StyledDropdown
71
- options={optionsPrice}
72
- onChange={onChangeOrder}
73
- width={'220px'}
74
- />
75
- </WrapperContainer>
76
- <ItemComponentScrollWrapper id="MarketContainer">
77
- {items?.map((item, index) => (
78
- <MarketplaceRows
79
- key={`${item.key}_${index}`}
80
- atlasIMG={atlasIMG}
81
- atlasJSON={atlasJSON}
82
- item={item}
83
- itemPrice={10}
84
- equipmentSet={equipmentSet}
85
- onHandleClick={onHandleClick}
86
- />
87
- ))}
88
- </ItemComponentScrollWrapper>
89
- </>
90
- </DraggableContainer>
91
- );
92
- };
93
-
94
- const InputWrapper = styled.div`
95
- width: 95%;
96
- display: flex;
97
- justify-content: flex-start;
98
- align-items: center;
99
- margin: auto;
100
- margin-bottom: 10px;
101
- p {
102
- width: auto;
103
- margin-right: 20px;
104
- }
105
- input {
106
- width: 68%;
107
- height: 10px;
108
- }
109
- `;
110
-
111
- const WrapperContainer = styled.div`
112
- display: grid;
113
- grid-template-columns: 30% 30% 30%;
114
- justify-content: space-between;
115
- width: 90%;
116
- margin-left: 10px;
117
- .rpgui-content .rpgui-dropdown-imp-header {
118
- padding: 0px 10px 0 !important;
119
- }
120
- `;
121
-
122
- const ItemComponentScrollWrapper = styled.div`
123
- overflow-y: scroll;
124
- height: 390px;
125
- width: 100%;
126
- margin-top: 1rem;
127
- `;
128
-
129
- const StyledDropdown = styled(Dropdown)`
130
- margin: 3px !important;
131
- width: 170px !important;
132
- `;
1
+ import { IEquipmentSet, IItem, IMarketplaceItem } from '@rpg-engine/shared';
2
+ import React, { useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import { Button, ButtonTypes } from '../Button';
5
+ import { DraggableContainer } from '../DraggableContainer';
6
+ import { Pager } from '../Pager';
7
+ import { RPGUIContainerTypes } from '../RPGUIContainer';
8
+ import { BuyPanel } from './BuyPanel';
9
+ import { ManagmentPanel } from './ManagmentPanel';
10
+
11
+ export interface IMarketPlaceProps {
12
+ items: IMarketplaceItem[];
13
+ atlasJSON: any;
14
+ atlasIMG: any;
15
+ onClose: () => void;
16
+ onChangeType: (value: string) => void;
17
+ onChangeRarity: (value: string) => void;
18
+ onChangeOrder: (value: string) => void;
19
+ onChangeNameInput: (value: string) => void;
20
+ onChangeMainLevelInput: (
21
+ value: [number | undefined, number | undefined]
22
+ ) => void;
23
+ onChangeSecondaryLevelInput: (
24
+ value: [number | undefined, number | undefined]
25
+ ) => void;
26
+ onChangePriceInput: (value: [number | undefined, number | undefined]) => void;
27
+ scale?: number;
28
+ equipmentSet?: IEquipmentSet | null;
29
+ onMarketPlaceItemBuy?: (marketPlaceItemId: string) => void;
30
+ onMarketPlaceItemRemove?: (marketPlaceItemId: string) => void;
31
+ availableGold: number;
32
+ selectedItemToSell: IItem | null;
33
+ onSelectedItemToSellRemove: (item: IItem) => void;
34
+ onYourPanelToggle: (yourPanel: boolean) => void;
35
+ onAddItemToMarketplace: (item: IItem, price: number) => void;
36
+ characterId: string;
37
+ enableHotkeys?: () => void;
38
+ disableHotkeys?: () => void;
39
+ onMoneyWithdraw: () => void;
40
+ totalItems: number;
41
+ currentPage: number;
42
+ itemsPerPage: number;
43
+ onPageChange: (page: number) => void;
44
+ }
45
+
46
+ export const Marketplace: React.FC<IMarketPlaceProps> = props => {
47
+ const { onClose, scale, onYourPanelToggle } = props;
48
+
49
+ const [isYourPanel, setIsYourPanel] = useState(false);
50
+
51
+ return (
52
+ <DraggableContainer
53
+ type={RPGUIContainerTypes.Framed}
54
+ onCloseButton={() => {
55
+ if (onClose) onClose();
56
+ }}
57
+ width="800px"
58
+ cancelDrag="#MarketContainer, .rpgui-dropdown-imp, input, .empty-slot, button"
59
+ scale={scale}
60
+ >
61
+ {isYourPanel && (
62
+ <>
63
+ <ManagmentPanel {...props} />
64
+
65
+ <PagerContainer>
66
+ <Button
67
+ buttonType={ButtonTypes.RPGUIButton}
68
+ onPointerDown={() => {
69
+ onYourPanelToggle(false);
70
+ setIsYourPanel(false);
71
+ }}
72
+ >
73
+ Go to marketplace
74
+ </Button>
75
+ <Pager {...props} />
76
+ </PagerContainer>
77
+ </>
78
+ )}
79
+ {!isYourPanel && (
80
+ <>
81
+ <BuyPanel {...props} />
82
+
83
+ <PagerContainer>
84
+ <Button
85
+ buttonType={ButtonTypes.RPGUIButton}
86
+ onPointerDown={() => {
87
+ onYourPanelToggle(true);
88
+ setIsYourPanel(true);
89
+ }}
90
+ >
91
+ Go to your panel
92
+ </Button>
93
+ <Pager {...props} />
94
+ </PagerContainer>
95
+ </>
96
+ )}
97
+ </DraggableContainer>
98
+ );
99
+ };
100
+
101
+ const PagerContainer = styled.div`
102
+ display: flex;
103
+ justify-content: space-between;
104
+ align-items: center;
105
+ width: calc(100% - 30px);
106
+ `;
@@ -1,171 +1,177 @@
1
- import {
2
- getItemTextureKeyPath,
3
- IEquipmentSet,
4
- IItem,
5
- } from '@rpg-engine/shared';
6
- import React from 'react';
7
- import styled from 'styled-components';
8
- import { uiColors } from '../../constants/uiColors';
9
- import { uiFonts } from '../../constants/uiFonts';
10
- import { Button, ButtonTypes } from '../Button';
11
- import { ItemInfoWrapper } from '../Item/Cards/ItemInfoWrapper';
12
- import { Ellipsis } from '../shared/Ellipsis';
13
- import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
14
-
15
- export interface IMarketPlaceRowsPropos {
16
- atlasJSON: any;
17
- atlasIMG: any;
18
- item: IItem;
19
- itemPrice: number;
20
- equipmentSet?: IEquipmentSet | null;
21
- scale?: number;
22
- onHandleClick: (value: string) => void;
23
- }
24
-
25
- export const MarketplaceRows: React.FC<IMarketPlaceRowsPropos> = ({
26
- atlasJSON,
27
- atlasIMG,
28
- item,
29
- itemPrice,
30
- equipmentSet,
31
- scale,
32
- onHandleClick,
33
- }) => {
34
- return (
35
- <MarketPlaceWrapper>
36
- <ItemIconContainer>
37
- <SpriteContainer>
38
- <ItemInfoWrapper
39
- item={item}
40
- atlasIMG={atlasIMG}
41
- atlasJSON={atlasJSON}
42
- equipmentSet={equipmentSet}
43
- scale={scale}
44
- >
45
- <SpriteFromAtlas
46
- atlasIMG={atlasIMG}
47
- atlasJSON={atlasJSON}
48
- spriteKey={getItemTextureKeyPath(
49
- {
50
- key: item.key,
51
- stackQty: item.stackQty || 1,
52
- texturePath: item.texturePath,
53
- isStackable: item.isStackable,
54
- },
55
- atlasJSON
56
- )}
57
- imgScale={2}
58
- />
59
- </ItemInfoWrapper>
60
- </SpriteContainer>
61
- <PriceValue>
62
- <p>
63
- <Ellipsis maxLines={1} maxWidth="150px" fontSize="10px">
64
- {item.name}
65
- </Ellipsis>
66
- </p>
67
- </PriceValue>
68
- </ItemIconContainer>
69
- <QuantityContainer>
70
- <QuantityDisplay>
71
- <TextOverlay>
72
- <Item>
73
- <Ellipsis maxLines={1} maxWidth="150px" fontSize="10px">
74
- {item.rarity}
75
- </Ellipsis>
76
- </Item>
77
- </TextOverlay>
78
- </QuantityDisplay>
79
- </QuantityContainer>
80
- <ItemIconContainer>
81
- <SpriteContainer>
82
- <SpriteFromAtlas
83
- atlasIMG={atlasIMG}
84
- atlasJSON={atlasJSON}
85
- spriteKey={'others/gold-coin-qty-4.png'}
86
- imgScale={2}
87
- />
88
- </SpriteContainer>
89
- <PriceValue>
90
- <p>
91
- <Ellipsis maxLines={1} maxWidth="150px" fontSize="10px">
92
- ${itemPrice}
93
- </Ellipsis>
94
- </p>
95
- </PriceValue>
96
- </ItemIconContainer>
97
- <ButtonContainer>
98
- <Button
99
- buttonType={ButtonTypes.RPGUIButton}
100
- onClick={() => onHandleClick(item.name)}
101
- >
102
- Buy
103
- </Button>
104
- </ButtonContainer>
105
- </MarketPlaceWrapper>
106
- );
107
- };
108
-
109
- const MarketPlaceWrapper = styled.div`
110
- margin: auto;
111
- display: grid;
112
- grid-template-columns: 35% 20% 20% 25%;
113
-
114
- &:hover {
115
- background-color: ${uiColors.darkGray};
116
- }
117
- padding: 0.5rem;
118
- p {
119
- font-size: 0.8rem;
120
- }
121
- `;
122
-
123
- const ItemIconContainer = styled.div`
124
- display: flex;
125
- justify-content: flex-start;
126
- align-items: center;
127
- `;
128
-
129
- const SpriteContainer = styled.div`
130
- position: relative;
131
- top: -0.5rem;
132
- left: 0.5rem;
133
- `;
134
-
135
- const Item = styled.span`
136
- color: white;
137
- text-align: center;
138
- z-index: 1;
139
- width: 100%;
140
- `;
141
-
142
- const TextOverlay = styled.div`
143
- width: 100%;
144
- position: relative;
145
- `;
146
-
147
- interface IContainerProps {
148
- percentageWidth?: number;
149
- minWidth?: number;
150
- style?: Record<string, any>;
151
- }
152
-
153
- const QuantityContainer = styled.div<IContainerProps>`
154
- position: relative;
155
- display: flex;
156
- min-width: 100px;
157
- justify-content: center;
158
- align-items: center;
159
- `;
160
-
161
- const QuantityDisplay = styled.div`
162
- font-size: ${uiFonts.size.small};
163
- `;
164
-
165
- const PriceValue = styled.div`
166
- margin-left: 40px;
167
- `;
168
-
169
- const ButtonContainer = styled.div`
170
- margin: auto;
171
- `;
1
+ import {
2
+ getItemTextureKeyPath,
3
+ IEquipmentSet,
4
+ IItem,
5
+ } from '@rpg-engine/shared';
6
+ import React from 'react';
7
+ import styled from 'styled-components';
8
+ import { uiColors } from '../../constants/uiColors';
9
+ import { uiFonts } from '../../constants/uiFonts';
10
+ import { Button, ButtonTypes } from '../Button';
11
+ import { ItemInfoWrapper } from '../Item/Cards/ItemInfoWrapper';
12
+ import { rarityColor } from '../Item/Inventory/ItemSlot';
13
+ import { Ellipsis } from '../shared/Ellipsis';
14
+ import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
15
+
16
+ export interface IMarketPlaceRowsPropos {
17
+ atlasJSON: any;
18
+ atlasIMG: any;
19
+ item: IItem;
20
+ itemPrice: number;
21
+ equipmentSet?: IEquipmentSet | null;
22
+ scale?: number;
23
+ onMarketPlaceItemBuy?: () => void;
24
+ onMarketPlaceItemRemove?: () => void;
25
+ disabled?: boolean;
26
+ }
27
+
28
+ export const MarketplaceRows: React.FC<IMarketPlaceRowsPropos> = ({
29
+ atlasJSON,
30
+ atlasIMG,
31
+ item,
32
+ itemPrice,
33
+ equipmentSet,
34
+ scale,
35
+ onMarketPlaceItemBuy,
36
+ onMarketPlaceItemRemove,
37
+ disabled,
38
+ }) => {
39
+ return (
40
+ <MarketplaceWrapper>
41
+ <ItemIconContainer>
42
+ <SpriteContainer>
43
+ <ItemInfoWrapper
44
+ item={item}
45
+ atlasIMG={atlasIMG}
46
+ atlasJSON={atlasJSON}
47
+ equipmentSet={equipmentSet}
48
+ scale={scale}
49
+ >
50
+ <RarityContainer item={item}>
51
+ <SpriteFromAtlas
52
+ atlasIMG={atlasIMG}
53
+ atlasJSON={atlasJSON}
54
+ spriteKey={getItemTextureKeyPath(
55
+ {
56
+ key: item.key,
57
+ stackQty: item.stackQty || 1,
58
+ texturePath: item.texturePath,
59
+ isStackable: item.isStackable,
60
+ },
61
+ atlasJSON
62
+ )}
63
+ imgScale={2}
64
+ />
65
+ </RarityContainer>
66
+ <QuantityContainer>
67
+ {item.stackQty &&
68
+ item.stackQty > 1 &&
69
+ `x${Math.round(item.stackQty * 10) / 10}`}
70
+ </QuantityContainer>
71
+ </ItemInfoWrapper>
72
+ </SpriteContainer>
73
+ <PriceValue>
74
+ <p>
75
+ <Ellipsis maxLines={1} maxWidth="200px" fontSize="10px">
76
+ {item.name}
77
+ </Ellipsis>
78
+ </p>
79
+ </PriceValue>
80
+ </ItemIconContainer>
81
+
82
+ <Flex>
83
+ <ItemIconContainer>
84
+ <GoldContainer>
85
+ <SpriteFromAtlas
86
+ atlasIMG={atlasIMG}
87
+ atlasJSON={atlasJSON}
88
+ spriteKey="others/gold-coin-qty-5.png"
89
+ imgScale={2}
90
+ />
91
+ </GoldContainer>
92
+ <PriceValue>
93
+ <p>
94
+ <Ellipsis maxLines={1} maxWidth="200px" fontSize="10px">
95
+ ${itemPrice}
96
+ </Ellipsis>
97
+ </p>
98
+ </PriceValue>
99
+ </ItemIconContainer>
100
+ <ButtonContainer>
101
+ <Button
102
+ buttonType={ButtonTypes.RPGUIButton}
103
+ disabled={disabled}
104
+ onPointerDown={() => {
105
+ if (disabled) return;
106
+
107
+ onMarketPlaceItemBuy?.();
108
+ onMarketPlaceItemRemove?.();
109
+ }}
110
+ >
111
+ {onMarketPlaceItemBuy ? 'Buy' : 'Remove'}
112
+ </Button>
113
+ </ButtonContainer>
114
+ </Flex>
115
+ </MarketplaceWrapper>
116
+ );
117
+ };
118
+
119
+ const MarketplaceWrapper = styled.div`
120
+ margin: auto;
121
+ display: flex;
122
+ justify-content: space-between;
123
+ padding: 0.5rem;
124
+
125
+ &:hover {
126
+ background-color: ${uiColors.darkGray};
127
+ }
128
+
129
+ p {
130
+ font-size: 0.8rem;
131
+ }
132
+ `;
133
+
134
+ const QuantityContainer = styled.p`
135
+ position: absolute;
136
+ display: block;
137
+ top: 15px;
138
+ left: 25px;
139
+ font-size: ${uiFonts.size.xsmall} !important;
140
+ `;
141
+
142
+ const Flex = styled.div`
143
+ display: flex;
144
+ gap: 24px;
145
+ `;
146
+
147
+ const ItemIconContainer = styled.div`
148
+ display: flex;
149
+ justify-content: flex-start;
150
+ align-items: center;
151
+ `;
152
+
153
+ const GoldContainer = styled.div`
154
+ position: relative;
155
+ top: -0.5rem;
156
+ left: 0.5rem;
157
+ `;
158
+ const SpriteContainer = styled.div`
159
+ position: relative;
160
+ left: 0.5rem;
161
+ `;
162
+
163
+ const PriceValue = styled.div`
164
+ margin-left: 40px;
165
+ `;
166
+
167
+ const ButtonContainer = styled.div`
168
+ margin: auto;
169
+ `;
170
+
171
+ const RarityContainer = styled.div<{ item: IItem }>`
172
+ border-color: ${({ item }) => rarityColor(item)};
173
+ box-shadow: ${({ item }) => `0 0 5px 8px ${rarityColor(item)}`} inset,
174
+ ${({ item }) => `0 0 8px 6px ${rarityColor(item)}`};
175
+ width: 32px;
176
+ height: 32px;
177
+ `;