@rpg-engine/long-bow 0.3.62 → 0.3.63

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 (142) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/long-bow.cjs.development.js +937 -925
  4. package/dist/long-bow.cjs.development.js.map +1 -1
  5. package/dist/long-bow.cjs.production.min.js +1 -1
  6. package/dist/long-bow.cjs.production.min.js.map +1 -1
  7. package/dist/long-bow.esm.js +744 -732
  8. package/dist/long-bow.esm.js.map +1 -1
  9. package/package.json +100 -100
  10. package/src/components/Abstractions/SlotsContainer.tsx +45 -45
  11. package/src/components/Arrow/SelectArrow.tsx +69 -69
  12. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  13. package/src/components/Arrow/img/arrow01-left.png +0 -0
  14. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  15. package/src/components/Arrow/img/arrow01-right.png +0 -0
  16. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  17. package/src/components/Arrow/img/arrow02-left.png +0 -0
  18. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  19. package/src/components/Arrow/img/arrow02-right.png +0 -0
  20. package/src/components/Button.tsx +40 -40
  21. package/src/components/Character/CharacterSelection.tsx +96 -96
  22. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  23. package/src/components/Chat/Chat.tsx +195 -195
  24. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  25. package/src/components/CheckButton.tsx +65 -65
  26. package/src/components/CircularController/CircularController.tsx +248 -248
  27. package/src/components/CraftBook/CraftBook.tsx +227 -227
  28. package/src/components/CraftBook/MockItems.ts +46 -46
  29. package/src/components/DraggableContainer.tsx +153 -153
  30. package/src/components/Dropdown.tsx +90 -90
  31. package/src/components/DropdownSelectorContainer.tsx +42 -42
  32. package/src/components/Equipment/EquipmentSet.tsx +190 -190
  33. package/src/components/HistoryDialog.tsx +104 -104
  34. package/src/components/Input.tsx +15 -15
  35. package/src/components/Item/Cards/ItemTooltip.tsx +33 -33
  36. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  37. package/src/components/Item/Inventory/ItemContainer.tsx +210 -210
  38. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  39. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  40. package/src/components/Item/Inventory/ItemSlot.tsx +501 -501
  41. package/src/components/Item/Inventory/itemContainerHelper.ts +156 -156
  42. package/src/components/ListMenu.tsx +63 -63
  43. package/src/components/Multitab/Tab.tsx +66 -66
  44. package/src/components/Multitab/TabBody.tsx +13 -13
  45. package/src/components/Multitab/TabsContainer.tsx +97 -97
  46. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  47. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  48. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  49. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  50. package/src/components/ProgressBar.tsx +92 -92
  51. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  52. package/src/components/QuestInfo/QuestInfo.tsx +230 -230
  53. package/src/components/QuestList.tsx +129 -129
  54. package/src/components/RPGUIContainer.tsx +47 -47
  55. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  56. package/src/components/RPGUIRoot.tsx +14 -14
  57. package/src/components/RadioButton.tsx +53 -53
  58. package/src/components/RadioInput/RadioButton.tsx +96 -96
  59. package/src/components/RadioInput/RadioInput.tsx +102 -102
  60. package/src/components/RadioInput/instruments.ts +15 -15
  61. package/src/components/RangeSlider.tsx +78 -78
  62. package/src/components/RelativeListMenu.tsx +83 -83
  63. package/src/components/ScrollList.tsx +79 -79
  64. package/src/components/Shortcuts/Shortcuts.tsx +151 -151
  65. package/src/components/Shortcuts/ShortcutsSetter.tsx +132 -132
  66. package/src/components/Shortcuts/SingleShortcut.ts +62 -62
  67. package/src/components/SimpleProgressBar.tsx +62 -62
  68. package/src/components/SkillProgressBar.tsx +133 -133
  69. package/src/components/SkillsContainer.tsx +198 -198
  70. package/src/components/Spellbook/Spell.tsx +201 -201
  71. package/src/components/Spellbook/Spellbook.tsx +150 -150
  72. package/src/components/Spellbook/constants.ts +8 -8
  73. package/src/components/Spellbook/mockSpells.ts +60 -60
  74. package/src/components/StaticBook/StaticBook.tsx +103 -103
  75. package/src/components/TextArea.tsx +11 -11
  76. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  77. package/src/components/TimeWidget/TimeWidget.tsx +63 -63
  78. package/src/components/TradingMenu/TradingItemRow.tsx +193 -181
  79. package/src/components/TradingMenu/TradingMenu.tsx +203 -203
  80. package/src/components/TradingMenu/items.mock.ts +96 -96
  81. package/src/components/Truncate.tsx +25 -25
  82. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  83. package/src/components/shared/Column.tsx +16 -16
  84. package/src/components/shared/Ellipsis.tsx +65 -65
  85. package/src/components/shared/SpriteFromAtlas.tsx +102 -102
  86. package/src/components/typography/DynamicText.tsx +49 -49
  87. package/src/constants/uiColors.ts +20 -20
  88. package/src/constants/uiDevices.ts +3 -3
  89. package/src/constants/uiFonts.ts +12 -12
  90. package/src/hooks/useEventListener.ts +21 -21
  91. package/src/hooks/useOutsideAlerter.ts +25 -25
  92. package/src/index.tsx +40 -40
  93. package/src/libs/StringHelpers.ts +3 -3
  94. package/src/mocks/atlas/entities/entities.json +20215 -20215
  95. package/src/mocks/atlas/icons/icons.json +735 -735
  96. package/src/mocks/atlas/items/items.json +12086 -12086
  97. package/src/mocks/equipmentSet.mocks.ts +393 -393
  98. package/src/mocks/itemContainer.mocks.ts +562 -562
  99. package/src/mocks/skills.mocks.ts +128 -128
  100. package/src/stories/Arrow.stories.tsx +26 -26
  101. package/src/stories/Button.stories.tsx +36 -36
  102. package/src/stories/CharacterSelection.stories.tsx +45 -45
  103. package/src/stories/CharacterStatus.stories.tsx +29 -29
  104. package/src/stories/Chat.stories.tsx +187 -187
  105. package/src/stories/ChatDeprecated.stories.tsx +170 -170
  106. package/src/stories/CheckButton.stories.tsx +48 -48
  107. package/src/stories/CircullarController.stories.tsx +37 -37
  108. package/src/stories/CraftBook.stories.tsx +40 -40
  109. package/src/stories/DayNightPeriod.stories.tsx +27 -27
  110. package/src/stories/DraggableContainer.stories.tsx +28 -28
  111. package/src/stories/Dropdown.stories.tsx +46 -46
  112. package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
  113. package/src/stories/EquipmentSet.stories.tsx +65 -65
  114. package/src/stories/HistoryDialog.stories.tsx +61 -61
  115. package/src/stories/ItemContainer.stories.tsx +198 -198
  116. package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
  117. package/src/stories/ItemSelector.stories.tsx +77 -77
  118. package/src/stories/ItemTradingComponent.stories.tsx +35 -35
  119. package/src/stories/ListMenu.stories.tsx +56 -56
  120. package/src/stories/Multitab.stories.tsx +51 -51
  121. package/src/stories/NPCDialog.stories.tsx +130 -130
  122. package/src/stories/NPCMultiDialog.stories.tsx +71 -71
  123. package/src/stories/ProgressBar.stories.tsx +23 -23
  124. package/src/stories/PropertySelect.stories.tsx +40 -40
  125. package/src/stories/QuestInfo.stories.tsx +107 -107
  126. package/src/stories/QuestList.stories.tsx +82 -82
  127. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  128. package/src/stories/RadioButton.stories.tsx +49 -49
  129. package/src/stories/RadioInput.stories.tsx +34 -34
  130. package/src/stories/RangeSlider.stories.tsx +64 -64
  131. package/src/stories/ScrollList.stories.tsx +85 -85
  132. package/src/stories/Shortcuts.stories.tsx +39 -39
  133. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  134. package/src/stories/SkillProgressBar.stories.tsx +34 -34
  135. package/src/stories/SkillsContainer.stories.tsx +35 -35
  136. package/src/stories/Spellbook.stories.tsx +104 -104
  137. package/src/stories/StaticBook.stories.tsx +32 -32
  138. package/src/stories/Text.stories.tsx +42 -42
  139. package/src/stories/TimeWidget.stories.tsx +27 -27
  140. package/src/stories/TradingMenu.stories.tsx +45 -45
  141. package/src/types/eventTypes.ts +4 -4
  142. package/src/types/index.d.ts +2 -2
@@ -1,106 +1,106 @@
1
- import React, { useEffect, useState } from 'react';
2
- import styled from 'styled-components';
3
- import { uiFonts } from '../../constants/uiFonts';
4
- import SelectArrow from '../Arrow/SelectArrow';
5
- import { Ellipsis } from '../shared/Ellipsis';
6
-
7
- export interface IPropertySelectProps {
8
- availableProperties: Array<IPropertiesProps>;
9
- selectedProperty?: IPropertiesProps;
10
- children?: React.ReactNode;
11
- onChange: (selectedProperty: IPropertiesProps) => void;
12
- }
13
-
14
- export interface IPropertiesProps {
15
- id: string;
16
- name: string;
17
- }
18
-
19
- export const PropertySelect: React.FC<IPropertySelectProps> = ({
20
- availableProperties,
21
- onChange,
22
- }) => {
23
- const [currentIndex, setCurrentIndex] = useState(0);
24
- const propertiesLength = availableProperties.length - 1;
25
-
26
- const onLeftClick = () => {
27
- if (currentIndex === 0) setCurrentIndex(propertiesLength);
28
- else setCurrentIndex(index => index - 1);
29
- };
30
- const onRightClick = () => {
31
- if (currentIndex === propertiesLength) setCurrentIndex(0);
32
- else setCurrentIndex(index => index + 1);
33
- };
34
-
35
- useEffect(() => {
36
- onChange(availableProperties[currentIndex]);
37
- }, [currentIndex]);
38
-
39
- useEffect(() => {
40
- setCurrentIndex(0);
41
- }, [JSON.stringify(availableProperties)]);
42
-
43
- const getCurrentSelectionName = () => {
44
- const item = availableProperties[currentIndex];
45
- if (item) {
46
- return item.name;
47
- }
48
- return '';
49
- };
50
-
51
- return (
52
- <Container>
53
- <TextOverlay>
54
- <p>
55
- <Item>
56
- <Ellipsis maxLines={1} maxWidth="60%" center>
57
- {getCurrentSelectionName()}
58
- </Ellipsis>
59
- </Item>
60
- </p>
61
- </TextOverlay>
62
- <div className="rpgui-progress-track"></div>
63
-
64
- <SelectArrow direction="left" onPointerDown={onLeftClick}></SelectArrow>
65
- <SelectArrow direction="right" onPointerDown={onRightClick}></SelectArrow>
66
- </Container>
67
- );
68
- };
69
-
70
- const Item = styled.span`
71
- font-size: 1rem;
72
- color: white;
73
- text-align: center;
74
- z-index: 1;
75
- position: absolute;
76
- top: 12px;
77
- width: 100%;
78
-
79
- p {
80
- margin: 0 auto;
81
- font-size: ${uiFonts.size.small};
82
- }
83
- `;
84
-
85
- const TextOverlay = styled.div`
86
- width: 100%;
87
- position: relative;
88
- `;
89
-
90
- interface IContainerProps {
91
- percentageWidth?: number;
92
- minWidth?: number;
93
- style?: Record<string, any>;
94
- }
95
-
96
- const Container = styled.div<IContainerProps>`
97
- position: relative;
98
- display: flex;
99
- flex-direction: column;
100
- justify-content: start;
101
- align-items: flex-start;
102
- min-width: 100px;
103
- width: 40%;
104
- `;
105
-
106
- export default PropertySelect;
1
+ import React, { useEffect, useState } from 'react';
2
+ import styled from 'styled-components';
3
+ import { uiFonts } from '../../constants/uiFonts';
4
+ import SelectArrow from '../Arrow/SelectArrow';
5
+ import { Ellipsis } from '../shared/Ellipsis';
6
+
7
+ export interface IPropertySelectProps {
8
+ availableProperties: Array<IPropertiesProps>;
9
+ selectedProperty?: IPropertiesProps;
10
+ children?: React.ReactNode;
11
+ onChange: (selectedProperty: IPropertiesProps) => void;
12
+ }
13
+
14
+ export interface IPropertiesProps {
15
+ id: string;
16
+ name: string;
17
+ }
18
+
19
+ export const PropertySelect: React.FC<IPropertySelectProps> = ({
20
+ availableProperties,
21
+ onChange,
22
+ }) => {
23
+ const [currentIndex, setCurrentIndex] = useState(0);
24
+ const propertiesLength = availableProperties.length - 1;
25
+
26
+ const onLeftClick = () => {
27
+ if (currentIndex === 0) setCurrentIndex(propertiesLength);
28
+ else setCurrentIndex(index => index - 1);
29
+ };
30
+ const onRightClick = () => {
31
+ if (currentIndex === propertiesLength) setCurrentIndex(0);
32
+ else setCurrentIndex(index => index + 1);
33
+ };
34
+
35
+ useEffect(() => {
36
+ onChange(availableProperties[currentIndex]);
37
+ }, [currentIndex]);
38
+
39
+ useEffect(() => {
40
+ setCurrentIndex(0);
41
+ }, [JSON.stringify(availableProperties)]);
42
+
43
+ const getCurrentSelectionName = () => {
44
+ const item = availableProperties[currentIndex];
45
+ if (item) {
46
+ return item.name;
47
+ }
48
+ return '';
49
+ };
50
+
51
+ return (
52
+ <Container>
53
+ <TextOverlay>
54
+ <p>
55
+ <Item>
56
+ <Ellipsis maxLines={1} maxWidth="60%" center>
57
+ {getCurrentSelectionName()}
58
+ </Ellipsis>
59
+ </Item>
60
+ </p>
61
+ </TextOverlay>
62
+ <div className="rpgui-progress-track"></div>
63
+
64
+ <SelectArrow direction="left" onPointerDown={onLeftClick}></SelectArrow>
65
+ <SelectArrow direction="right" onPointerDown={onRightClick}></SelectArrow>
66
+ </Container>
67
+ );
68
+ };
69
+
70
+ const Item = styled.span`
71
+ font-size: 1rem;
72
+ color: white;
73
+ text-align: center;
74
+ z-index: 1;
75
+ position: absolute;
76
+ top: 12px;
77
+ width: 100%;
78
+
79
+ p {
80
+ margin: 0 auto;
81
+ font-size: ${uiFonts.size.small};
82
+ }
83
+ `;
84
+
85
+ const TextOverlay = styled.div`
86
+ width: 100%;
87
+ position: relative;
88
+ `;
89
+
90
+ interface IContainerProps {
91
+ percentageWidth?: number;
92
+ minWidth?: number;
93
+ style?: Record<string, any>;
94
+ }
95
+
96
+ const Container = styled.div<IContainerProps>`
97
+ position: relative;
98
+ display: flex;
99
+ flex-direction: column;
100
+ justify-content: start;
101
+ align-items: flex-start;
102
+ min-width: 100px;
103
+ width: 40%;
104
+ `;
105
+
106
+ export default PropertySelect;
@@ -1,230 +1,230 @@
1
- import { IQuest } from '@rpg-engine/shared';
2
- import React, { useEffect, useState } from 'react';
3
- import styled from 'styled-components';
4
- import { uiColors } from '../../constants/uiColors';
5
- import { uiFonts } from '../../constants/uiFonts';
6
- import SelectArrow from '../Arrow/SelectArrow';
7
- import { Button, ButtonTypes } from '../Button';
8
- import { DraggableContainer } from '../DraggableContainer';
9
-
10
- import { RPGUIContainerTypes } from '../RPGUIContainer';
11
- import { Column } from '../shared/Column';
12
- import thumbnailDefault from './img/default.png';
13
-
14
- export interface IQuestsButtonProps {
15
- disabled: boolean;
16
- title: string;
17
- onClick: (questId: string, npcId: string) => void;
18
- }
19
-
20
- export interface IQuestInfoProps {
21
- onClose?: () => void;
22
- buttons?: IQuestsButtonProps[];
23
- quests: IQuest[];
24
- onChangeQuest: (currentQuestIndex: number, currentQuestId: string) => void;
25
- }
26
-
27
- export const QuestInfo: React.FC<IQuestInfoProps> = ({
28
- quests,
29
- onClose,
30
- buttons,
31
- onChangeQuest,
32
- }) => {
33
- const [currentIndex, setCurrentIndex] = useState(0);
34
- const questsLength = quests.length - 1;
35
-
36
- useEffect(() => {
37
- if (onChangeQuest) {
38
- onChangeQuest(currentIndex, quests[currentIndex]._id);
39
- }
40
- }, [currentIndex]);
41
-
42
- const onLeftClick = () => {
43
- if (currentIndex === 0) setCurrentIndex(questsLength);
44
- else setCurrentIndex(index => index - 1);
45
- };
46
- const onRightClick = () => {
47
- if (currentIndex === questsLength) setCurrentIndex(0);
48
- else setCurrentIndex(index => index + 1);
49
- };
50
-
51
- return (
52
- <QuestDraggableContainer
53
- type={RPGUIContainerTypes.Framed}
54
- onCloseButton={() => {
55
- if (onClose) onClose();
56
- }}
57
- width="730px"
58
- cancelDrag=".equipment-container-body .arrow-selector"
59
- >
60
- {quests.length >= 2 ? (
61
- <QuestsContainer>
62
- {currentIndex !== 0 && (
63
- <SelectArrow
64
- direction="left"
65
- onPointerDown={onLeftClick}
66
- ></SelectArrow>
67
- )}
68
- {currentIndex !== quests.length - 1 && (
69
- <SelectArrow
70
- direction="right"
71
- onPointerDown={onRightClick}
72
- ></SelectArrow>
73
- )}
74
-
75
- <QuestContainer>
76
- <TitleContainer className="drag-handler">
77
- <Title>
78
- <Thumbnail
79
- src={quests[currentIndex].thumbnail || thumbnailDefault}
80
- />
81
- {quests[currentIndex].title}
82
- </Title>
83
- <QuestSplitDiv>
84
- <hr className="golden" />
85
- </QuestSplitDiv>
86
- </TitleContainer>
87
- <Content>
88
- <p>{quests[currentIndex].description}</p>
89
- </Content>
90
- <QuestColumn className="dark-background" justifyContent="flex-end">
91
- {buttons &&
92
- buttons.map((button, index) => (
93
- <Button
94
- key={index}
95
- onPointerDown={() =>
96
- button.onClick(
97
- quests[currentIndex]._id,
98
- quests[currentIndex].npcId
99
- )
100
- }
101
- disabled={button.disabled}
102
- buttonType={ButtonTypes.RPGUIButton}
103
- id={`button-${index}`}
104
- >
105
- {button.title}
106
- </Button>
107
- ))}
108
- </QuestColumn>
109
- </QuestContainer>
110
- </QuestsContainer>
111
- ) : (
112
- <QuestsContainer>
113
- <QuestContainer>
114
- <TitleContainer className="drag-handler">
115
- <Title>
116
- <Thumbnail src={quests[0].thumbnail || thumbnailDefault} />
117
- {quests[0].title}
118
- </Title>
119
- <QuestSplitDiv>
120
- <hr className="golden" />
121
- </QuestSplitDiv>
122
- </TitleContainer>
123
- <Content>
124
- <p>{quests[0].description}</p>
125
- </Content>
126
- <QuestColumn className="dark-background" justifyContent="flex-end">
127
- {buttons &&
128
- buttons.map((button, index) => (
129
- <Button
130
- key={index}
131
- onPointerDown={() =>
132
- button.onClick(quests[0]._id, quests[0].npcId)
133
- }
134
- disabled={button.disabled}
135
- buttonType={ButtonTypes.RPGUIButton}
136
- id={`button-${index}`}
137
- >
138
- {button.title}
139
- </Button>
140
- ))}
141
- </QuestColumn>
142
- </QuestContainer>
143
- </QuestsContainer>
144
- )}
145
- </QuestDraggableContainer>
146
- );
147
- };
148
-
149
- const QuestDraggableContainer = styled(DraggableContainer)`
150
- border: 1px solid black;
151
- width: 600px;
152
- padding: 0 0 0 0 !important;
153
- .DraggableContainer__TitleContainer-sc-184mpyl-2 {
154
- height: auto;
155
- }
156
- .container-close {
157
- position: absolute;
158
- margin-left: auto;
159
- top: 20px;
160
- padding-right: 5px;
161
- }
162
- img {
163
- display: inline-block;
164
- vertical-align: middle;
165
- line-height: normal;
166
- }
167
- `;
168
-
169
- const QuestContainer = styled.div`
170
- margin-right: 40px;
171
- margin-left: 40px;
172
- `;
173
-
174
- const QuestsContainer = styled.div`
175
- display: flex;
176
- align-items: center;
177
- `;
178
-
179
- const Content = styled.div`
180
- padding: 18px;
181
- h1 {
182
- text-align: left;
183
- margin: 14px 0px;
184
- }
185
- `;
186
-
187
- const QuestSplitDiv = styled.div`
188
- width: 100%;
189
- font-size: 11px;
190
- margin-bottom: 10px;
191
- hr {
192
- margin: 0px;
193
- padding: 0px;
194
- }
195
- p {
196
- margin-bottom: 0px;
197
- }
198
- `;
199
-
200
- const QuestColumn = styled(Column)`
201
- padding-top: 5px;
202
- margin-bottom: 20px;
203
- display: flex;
204
- justify-content: space-evenly;
205
- `;
206
-
207
- const TitleContainer = styled.div`
208
- width: 100%;
209
- display: flex;
210
- flex-wrap: wrap;
211
- justify-content: flex-start;
212
- align-items: center;
213
- margin-top: 1rem;
214
- `;
215
-
216
- const Title = styled.h1`
217
- color: white;
218
- z-index: 22;
219
- font-size: ${uiFonts.size.medium} !important;
220
- color: ${uiColors.yellow} !important;
221
- `;
222
-
223
- const Thumbnail = styled.img`
224
- color: white;
225
- z-index: 22;
226
- width: 32px * 1.5;
227
- margin-right: 0.5rem;
228
- position: relative;
229
- top: -4px;
230
- `;
1
+ import { IQuest } from '@rpg-engine/shared';
2
+ import React, { useEffect, useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import { uiColors } from '../../constants/uiColors';
5
+ import { uiFonts } from '../../constants/uiFonts';
6
+ import SelectArrow from '../Arrow/SelectArrow';
7
+ import { Button, ButtonTypes } from '../Button';
8
+ import { DraggableContainer } from '../DraggableContainer';
9
+
10
+ import { RPGUIContainerTypes } from '../RPGUIContainer';
11
+ import { Column } from '../shared/Column';
12
+ import thumbnailDefault from './img/default.png';
13
+
14
+ export interface IQuestsButtonProps {
15
+ disabled: boolean;
16
+ title: string;
17
+ onClick: (questId: string, npcId: string) => void;
18
+ }
19
+
20
+ export interface IQuestInfoProps {
21
+ onClose?: () => void;
22
+ buttons?: IQuestsButtonProps[];
23
+ quests: IQuest[];
24
+ onChangeQuest: (currentQuestIndex: number, currentQuestId: string) => void;
25
+ }
26
+
27
+ export const QuestInfo: React.FC<IQuestInfoProps> = ({
28
+ quests,
29
+ onClose,
30
+ buttons,
31
+ onChangeQuest,
32
+ }) => {
33
+ const [currentIndex, setCurrentIndex] = useState(0);
34
+ const questsLength = quests.length - 1;
35
+
36
+ useEffect(() => {
37
+ if (onChangeQuest) {
38
+ onChangeQuest(currentIndex, quests[currentIndex]._id);
39
+ }
40
+ }, [currentIndex]);
41
+
42
+ const onLeftClick = () => {
43
+ if (currentIndex === 0) setCurrentIndex(questsLength);
44
+ else setCurrentIndex(index => index - 1);
45
+ };
46
+ const onRightClick = () => {
47
+ if (currentIndex === questsLength) setCurrentIndex(0);
48
+ else setCurrentIndex(index => index + 1);
49
+ };
50
+
51
+ return (
52
+ <QuestDraggableContainer
53
+ type={RPGUIContainerTypes.Framed}
54
+ onCloseButton={() => {
55
+ if (onClose) onClose();
56
+ }}
57
+ width="730px"
58
+ cancelDrag=".equipment-container-body .arrow-selector"
59
+ >
60
+ {quests.length >= 2 ? (
61
+ <QuestsContainer>
62
+ {currentIndex !== 0 && (
63
+ <SelectArrow
64
+ direction="left"
65
+ onPointerDown={onLeftClick}
66
+ ></SelectArrow>
67
+ )}
68
+ {currentIndex !== quests.length - 1 && (
69
+ <SelectArrow
70
+ direction="right"
71
+ onPointerDown={onRightClick}
72
+ ></SelectArrow>
73
+ )}
74
+
75
+ <QuestContainer>
76
+ <TitleContainer className="drag-handler">
77
+ <Title>
78
+ <Thumbnail
79
+ src={quests[currentIndex].thumbnail || thumbnailDefault}
80
+ />
81
+ {quests[currentIndex].title}
82
+ </Title>
83
+ <QuestSplitDiv>
84
+ <hr className="golden" />
85
+ </QuestSplitDiv>
86
+ </TitleContainer>
87
+ <Content>
88
+ <p>{quests[currentIndex].description}</p>
89
+ </Content>
90
+ <QuestColumn className="dark-background" justifyContent="flex-end">
91
+ {buttons &&
92
+ buttons.map((button, index) => (
93
+ <Button
94
+ key={index}
95
+ onPointerDown={() =>
96
+ button.onClick(
97
+ quests[currentIndex]._id,
98
+ quests[currentIndex].npcId
99
+ )
100
+ }
101
+ disabled={button.disabled}
102
+ buttonType={ButtonTypes.RPGUIButton}
103
+ id={`button-${index}`}
104
+ >
105
+ {button.title}
106
+ </Button>
107
+ ))}
108
+ </QuestColumn>
109
+ </QuestContainer>
110
+ </QuestsContainer>
111
+ ) : (
112
+ <QuestsContainer>
113
+ <QuestContainer>
114
+ <TitleContainer className="drag-handler">
115
+ <Title>
116
+ <Thumbnail src={quests[0].thumbnail || thumbnailDefault} />
117
+ {quests[0].title}
118
+ </Title>
119
+ <QuestSplitDiv>
120
+ <hr className="golden" />
121
+ </QuestSplitDiv>
122
+ </TitleContainer>
123
+ <Content>
124
+ <p>{quests[0].description}</p>
125
+ </Content>
126
+ <QuestColumn className="dark-background" justifyContent="flex-end">
127
+ {buttons &&
128
+ buttons.map((button, index) => (
129
+ <Button
130
+ key={index}
131
+ onPointerDown={() =>
132
+ button.onClick(quests[0]._id, quests[0].npcId)
133
+ }
134
+ disabled={button.disabled}
135
+ buttonType={ButtonTypes.RPGUIButton}
136
+ id={`button-${index}`}
137
+ >
138
+ {button.title}
139
+ </Button>
140
+ ))}
141
+ </QuestColumn>
142
+ </QuestContainer>
143
+ </QuestsContainer>
144
+ )}
145
+ </QuestDraggableContainer>
146
+ );
147
+ };
148
+
149
+ const QuestDraggableContainer = styled(DraggableContainer)`
150
+ border: 1px solid black;
151
+ width: 600px;
152
+ padding: 0 0 0 0 !important;
153
+ .DraggableContainer__TitleContainer-sc-184mpyl-2 {
154
+ height: auto;
155
+ }
156
+ .container-close {
157
+ position: absolute;
158
+ margin-left: auto;
159
+ top: 20px;
160
+ padding-right: 5px;
161
+ }
162
+ img {
163
+ display: inline-block;
164
+ vertical-align: middle;
165
+ line-height: normal;
166
+ }
167
+ `;
168
+
169
+ const QuestContainer = styled.div`
170
+ margin-right: 40px;
171
+ margin-left: 40px;
172
+ `;
173
+
174
+ const QuestsContainer = styled.div`
175
+ display: flex;
176
+ align-items: center;
177
+ `;
178
+
179
+ const Content = styled.div`
180
+ padding: 18px;
181
+ h1 {
182
+ text-align: left;
183
+ margin: 14px 0px;
184
+ }
185
+ `;
186
+
187
+ const QuestSplitDiv = styled.div`
188
+ width: 100%;
189
+ font-size: 11px;
190
+ margin-bottom: 10px;
191
+ hr {
192
+ margin: 0px;
193
+ padding: 0px;
194
+ }
195
+ p {
196
+ margin-bottom: 0px;
197
+ }
198
+ `;
199
+
200
+ const QuestColumn = styled(Column)`
201
+ padding-top: 5px;
202
+ margin-bottom: 20px;
203
+ display: flex;
204
+ justify-content: space-evenly;
205
+ `;
206
+
207
+ const TitleContainer = styled.div`
208
+ width: 100%;
209
+ display: flex;
210
+ flex-wrap: wrap;
211
+ justify-content: flex-start;
212
+ align-items: center;
213
+ margin-top: 1rem;
214
+ `;
215
+
216
+ const Title = styled.h1`
217
+ color: white;
218
+ z-index: 22;
219
+ font-size: ${uiFonts.size.medium} !important;
220
+ color: ${uiColors.yellow} !important;
221
+ `;
222
+
223
+ const Thumbnail = styled.img`
224
+ color: white;
225
+ z-index: 22;
226
+ width: 32px * 1.5;
227
+ margin-right: 0.5rem;
228
+ position: relative;
229
+ top: -4px;
230
+ `;