@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,134 +1,134 @@
1
- import { ISpell } from '@rpg-engine/shared';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
- import { uiColors } from '../../../constants/uiColors';
5
- import { uiFonts } from '../../../constants/uiFonts';
6
- import { formatSpellCastingType } from '../../../libs/CastingTypeHelper';
7
-
8
- interface ISpellInfoProps {
9
- spell: ISpell;
10
- }
11
-
12
- export const SpellInfo: React.FC<ISpellInfoProps> = ({ spell }) => {
13
- const {
14
- magicWords,
15
- name,
16
- manaCost,
17
- requiredItem,
18
- description,
19
- castingType,
20
- cooldown,
21
- maxDistanceGrid,
22
- } = spell;
23
- return (
24
- <Container>
25
- <Header>
26
- <div>
27
- <Title>{name}</Title>
28
- <Type>{magicWords}</Type>
29
- </div>
30
- </Header>
31
- <Statistic>
32
- <div className="label">Casting Type:</div>
33
- <div className="value">{formatSpellCastingType(castingType)}</div>
34
- </Statistic>
35
- <Statistic>
36
- <div className="label">Magic words:</div>
37
- <div className="value">{magicWords}</div>
38
- </Statistic>
39
- <Statistic>
40
- <div className="label">Mana cost:</div>
41
- <div className="value">{manaCost}</div>
42
- </Statistic>
43
- <Statistic>
44
- <div className="label">Cooldown:</div>
45
- <div className="value">{cooldown}</div>
46
- </Statistic>
47
- {maxDistanceGrid && (
48
- <Statistic>
49
- <div className="label">Max Distance Grid:</div>
50
- <div className="value">{maxDistanceGrid}</div>
51
- </Statistic>
52
- )}
53
- <Statistic>
54
- {requiredItem && (
55
- <>
56
- <div className="label">Required Item:</div>
57
- <div className="value">{requiredItem}</div>
58
- </>
59
- )}
60
- </Statistic>
61
- <Description>{description}</Description>
62
- </Container>
63
- );
64
- };
65
-
66
- const Container = styled.div`
67
- color: white;
68
- background-color: #222;
69
- border-radius: 5px;
70
- padding: 0.5rem;
71
- font-size: ${uiFonts.size.small};
72
- border: 3px solid ${uiColors.lightGray};
73
- height: max-content;
74
- width: 30rem;
75
-
76
- @media (max-width: 580px) {
77
- width: 80vw;
78
- }
79
- `;
80
-
81
- const Title = styled.div`
82
- font-size: ${uiFonts.size.medium};
83
- font-weight: bold;
84
- margin-bottom: 0.5rem;
85
- display: flex;
86
- align-items: center;
87
- margin: 0;
88
- `;
89
-
90
- const Type = styled.div`
91
- font-size: ${uiFonts.size.small};
92
- margin-top: 0.2rem;
93
- color: ${uiColors.lightGray};
94
- `;
95
-
96
- const Description = styled.div`
97
- margin-top: 1.5rem;
98
- font-size: ${uiFonts.size.small};
99
- color: ${uiColors.lightGray};
100
- font-style: italic;
101
- `;
102
-
103
- const Header = styled.div`
104
- display: flex;
105
- align-items: center;
106
- justify-content: space-between;
107
- margin-bottom: 0.5rem;
108
- `;
109
-
110
- const Statistic = styled.div`
111
- margin-bottom: 0.4rem;
112
- width: max-content;
113
-
114
- .label {
115
- display: inline-block;
116
- margin-right: 0.5rem;
117
- color: inherit;
118
- }
119
-
120
- .value {
121
- display: inline-block;
122
- color: inherit;
123
- }
124
-
125
- &.better,
126
- .better {
127
- color: ${uiColors.lightGreen};
128
- }
129
-
130
- &.worse,
131
- .worse {
132
- color: ${uiColors.cardinal};
133
- }
134
- `;
1
+ import { ISpell } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ import styled from 'styled-components';
4
+ import { uiColors } from '../../../constants/uiColors';
5
+ import { uiFonts } from '../../../constants/uiFonts';
6
+ import { formatSpellCastingType } from '../../../libs/CastingTypeHelper';
7
+
8
+ interface ISpellInfoProps {
9
+ spell: ISpell;
10
+ }
11
+
12
+ export const SpellInfo: React.FC<ISpellInfoProps> = ({ spell }) => {
13
+ const {
14
+ magicWords,
15
+ name,
16
+ manaCost,
17
+ requiredItem,
18
+ description,
19
+ castingType,
20
+ cooldown,
21
+ maxDistanceGrid,
22
+ } = spell;
23
+ return (
24
+ <Container>
25
+ <Header>
26
+ <div>
27
+ <Title>{name}</Title>
28
+ <Type>{magicWords}</Type>
29
+ </div>
30
+ </Header>
31
+ <Statistic>
32
+ <div className="label">Casting Type:</div>
33
+ <div className="value">{formatSpellCastingType(castingType)}</div>
34
+ </Statistic>
35
+ <Statistic>
36
+ <div className="label">Magic words:</div>
37
+ <div className="value">{magicWords}</div>
38
+ </Statistic>
39
+ <Statistic>
40
+ <div className="label">Mana cost:</div>
41
+ <div className="value">{manaCost}</div>
42
+ </Statistic>
43
+ <Statistic>
44
+ <div className="label">Cooldown:</div>
45
+ <div className="value">{cooldown}</div>
46
+ </Statistic>
47
+ {maxDistanceGrid && (
48
+ <Statistic>
49
+ <div className="label">Max Distance Grid:</div>
50
+ <div className="value">{maxDistanceGrid}</div>
51
+ </Statistic>
52
+ )}
53
+ <Statistic>
54
+ {requiredItem && (
55
+ <>
56
+ <div className="label">Required Item:</div>
57
+ <div className="value">{requiredItem}</div>
58
+ </>
59
+ )}
60
+ </Statistic>
61
+ <Description>{description}</Description>
62
+ </Container>
63
+ );
64
+ };
65
+
66
+ const Container = styled.div`
67
+ color: white;
68
+ background-color: #222;
69
+ border-radius: 5px;
70
+ padding: 0.5rem;
71
+ font-size: ${uiFonts.size.small};
72
+ border: 3px solid ${uiColors.lightGray};
73
+ height: max-content;
74
+ width: 30rem;
75
+
76
+ @media (max-width: 580px) {
77
+ width: 80vw;
78
+ }
79
+ `;
80
+
81
+ const Title = styled.div`
82
+ font-size: ${uiFonts.size.medium};
83
+ font-weight: bold;
84
+ margin-bottom: 0.5rem;
85
+ display: flex;
86
+ align-items: center;
87
+ margin: 0;
88
+ `;
89
+
90
+ const Type = styled.div`
91
+ font-size: ${uiFonts.size.small};
92
+ margin-top: 0.2rem;
93
+ color: ${uiColors.lightGray};
94
+ `;
95
+
96
+ const Description = styled.div`
97
+ margin-top: 1.5rem;
98
+ font-size: ${uiFonts.size.small};
99
+ color: ${uiColors.lightGray};
100
+ font-style: italic;
101
+ `;
102
+
103
+ const Header = styled.div`
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ margin-bottom: 0.5rem;
108
+ `;
109
+
110
+ const Statistic = styled.div`
111
+ margin-bottom: 0.4rem;
112
+ width: max-content;
113
+
114
+ .label {
115
+ display: inline-block;
116
+ margin-right: 0.5rem;
117
+ color: inherit;
118
+ }
119
+
120
+ .value {
121
+ display: inline-block;
122
+ color: inherit;
123
+ }
124
+
125
+ &.better,
126
+ .better {
127
+ color: ${uiColors.lightGreen};
128
+ }
129
+
130
+ &.worse,
131
+ .worse {
132
+ color: ${uiColors.cardinal};
133
+ }
134
+ `;
@@ -1,31 +1,31 @@
1
- import { ISpell } from '@rpg-engine/shared';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
- import { SpellInfo } from './SpellInfo';
5
-
6
- export interface ISpellInfoDisplayProps {
7
- spell: ISpell;
8
- isMobile?: boolean;
9
- }
10
-
11
- export const SpellInfoDisplay: React.FC<ISpellInfoDisplayProps> = ({
12
- spell,
13
- isMobile,
14
- }) => {
15
- return (
16
- <Flex $isMobile={isMobile}>
17
- <SpellInfo spell={spell} />
18
- </Flex>
19
- );
20
- };
21
-
22
- const Flex = styled.div<{ $isMobile?: boolean }>`
23
- display: flex;
24
- gap: 0.5rem;
25
- flex-direction: ${({ $isMobile }) => ($isMobile ? 'row-reverse' : 'row')};
26
-
27
- @media (max-width: 580px) {
28
- flex-direction: column-reverse;
29
- align-items: center;
30
- }
31
- `;
1
+ import { ISpell } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ import styled from 'styled-components';
4
+ import { SpellInfo } from './SpellInfo';
5
+
6
+ export interface ISpellInfoDisplayProps {
7
+ spell: ISpell;
8
+ isMobile?: boolean;
9
+ }
10
+
11
+ export const SpellInfoDisplay: React.FC<ISpellInfoDisplayProps> = ({
12
+ spell,
13
+ isMobile,
14
+ }) => {
15
+ return (
16
+ <Flex $isMobile={isMobile}>
17
+ <SpellInfo spell={spell} />
18
+ </Flex>
19
+ );
20
+ };
21
+
22
+ const Flex = styled.div<{ $isMobile?: boolean }>`
23
+ display: flex;
24
+ gap: 0.5rem;
25
+ flex-direction: ${({ $isMobile }) => ($isMobile ? 'row-reverse' : 'row')};
26
+
27
+ @media (max-width: 580px) {
28
+ flex-direction: column-reverse;
29
+ align-items: center;
30
+ }
31
+ `;
@@ -1,48 +1,48 @@
1
- import { ISpell } from '@rpg-engine/shared';
2
- import React, { useState } from 'react';
3
- import { MobileSpellTooltip } from './MobileSpellTooltip';
4
- import { MagicTooltip } from './SpellTooltip';
5
-
6
- interface ISpellInfoWrapperProps {
7
- spell: ISpell;
8
- children: React.ReactNode;
9
- scale?: number;
10
- }
11
-
12
- export const SpellInfoWrapper: React.FC<ISpellInfoWrapperProps> = ({
13
- children,
14
- spell,
15
- scale,
16
- }) => {
17
- const [isTooltipVisible, setIsTooltipVisible] = useState(false);
18
- const [isTooltipMobileVisible, setIsTooltipMobileVisible] = useState(false);
19
-
20
- return (
21
- <div
22
- onMouseEnter={() => {
23
- if (!isTooltipMobileVisible) setIsTooltipVisible(true);
24
- }}
25
- onMouseLeave={setIsTooltipVisible.bind(null, false)}
26
- onTouchEnd={() => {
27
- setIsTooltipMobileVisible(true);
28
- setIsTooltipVisible(false);
29
- }}
30
- >
31
- {children}
32
-
33
- {isTooltipVisible && !isTooltipMobileVisible && (
34
- <MagicTooltip spell={spell} />
35
- )}
36
- {isTooltipMobileVisible && (
37
- <MobileSpellTooltip
38
- closeTooltip={() => {
39
- setIsTooltipMobileVisible(false);
40
- console.log('close');
41
- }}
42
- spell={spell}
43
- scale={scale}
44
- />
45
- )}
46
- </div>
47
- );
48
- };
1
+ import { ISpell } from '@rpg-engine/shared';
2
+ import React, { useState } from 'react';
3
+ import { MobileSpellTooltip } from './MobileSpellTooltip';
4
+ import { MagicTooltip } from './SpellTooltip';
5
+
6
+ interface ISpellInfoWrapperProps {
7
+ spell: ISpell;
8
+ children: React.ReactNode;
9
+ scale?: number;
10
+ }
11
+
12
+ export const SpellInfoWrapper: React.FC<ISpellInfoWrapperProps> = ({
13
+ children,
14
+ spell,
15
+ scale,
16
+ }) => {
17
+ const [isTooltipVisible, setIsTooltipVisible] = useState(false);
18
+ const [isTooltipMobileVisible, setIsTooltipMobileVisible] = useState(false);
19
+
20
+ return (
21
+ <div
22
+ onMouseEnter={() => {
23
+ if (!isTooltipMobileVisible) setIsTooltipVisible(true);
24
+ }}
25
+ onMouseLeave={setIsTooltipVisible.bind(null, false)}
26
+ onTouchEnd={() => {
27
+ setIsTooltipMobileVisible(true);
28
+ setIsTooltipVisible(false);
29
+ }}
30
+ >
31
+ {children}
32
+
33
+ {isTooltipVisible && !isTooltipMobileVisible && (
34
+ <MagicTooltip spell={spell} />
35
+ )}
36
+ {isTooltipMobileVisible && (
37
+ <MobileSpellTooltip
38
+ closeTooltip={() => {
39
+ setIsTooltipMobileVisible(false);
40
+ console.log('close');
41
+ }}
42
+ spell={spell}
43
+ scale={scale}
44
+ />
45
+ )}
46
+ </div>
47
+ );
48
+ };
@@ -1,70 +1,70 @@
1
- import { ISpell } from '@rpg-engine/shared';
2
- import React, { useEffect, useRef } from 'react';
3
- import styled from 'styled-components';
4
- import ModalPortal from '../../Abstractions/ModalPortal';
5
- import { SpellInfoDisplay } from './SpellInfoDisplay';
6
-
7
- export interface IMagicTooltipProps {
8
- spell: ISpell;
9
- }
10
-
11
- const offset = 20;
12
-
13
- export const MagicTooltip: React.FC<IMagicTooltipProps> = ({ spell }) => {
14
- const ref = useRef<HTMLDivElement>(null);
15
-
16
- useEffect(() => {
17
- const { current } = ref;
18
-
19
- if (current) {
20
- const handleMouseMove = (event: MouseEvent) => {
21
- const { clientX, clientY } = event;
22
-
23
- // Adjust the position of the tooltip based on the mouse position
24
- const rect = current.getBoundingClientRect();
25
-
26
- const tooltipWidth = rect.width;
27
- const tooltipHeight = rect.height;
28
- const isOffScreenRight =
29
- clientX + tooltipWidth + offset > window.innerWidth;
30
- const isOffScreenBottom =
31
- clientY + tooltipHeight + offset > window.innerHeight;
32
- const x = isOffScreenRight
33
- ? clientX - tooltipWidth - offset
34
- : clientX + offset;
35
- const y = isOffScreenBottom
36
- ? clientY - tooltipHeight - offset
37
- : clientY + offset;
38
-
39
- current.style.transform = `translate(${x}px, ${y}px)`;
40
- current.style.opacity = '1';
41
- };
42
-
43
- window.addEventListener('mousemove', handleMouseMove);
44
-
45
- return () => {
46
- window.removeEventListener('mousemove', handleMouseMove);
47
- };
48
- }
49
-
50
- return;
51
- }, []);
52
-
53
- return (
54
- <ModalPortal>
55
- <Container ref={ref}>
56
- <SpellInfoDisplay spell={spell} />
57
- </Container>
58
- </ModalPortal>
59
- );
60
- };
61
-
62
- const Container = styled.div`
63
- position: absolute;
64
- z-index: 100;
65
- pointer-events: none;
66
- left: 0;
67
- top: 0;
68
- opacity: 0;
69
- transition: opacity 0.08s;
70
- `;
1
+ import { ISpell } from '@rpg-engine/shared';
2
+ import React, { useEffect, useRef } from 'react';
3
+ import styled from 'styled-components';
4
+ import ModalPortal from '../../Abstractions/ModalPortal';
5
+ import { SpellInfoDisplay } from './SpellInfoDisplay';
6
+
7
+ export interface IMagicTooltipProps {
8
+ spell: ISpell;
9
+ }
10
+
11
+ const offset = 20;
12
+
13
+ export const MagicTooltip: React.FC<IMagicTooltipProps> = ({ spell }) => {
14
+ const ref = useRef<HTMLDivElement>(null);
15
+
16
+ useEffect(() => {
17
+ const { current } = ref;
18
+
19
+ if (current) {
20
+ const handleMouseMove = (event: MouseEvent) => {
21
+ const { clientX, clientY } = event;
22
+
23
+ // Adjust the position of the tooltip based on the mouse position
24
+ const rect = current.getBoundingClientRect();
25
+
26
+ const tooltipWidth = rect.width;
27
+ const tooltipHeight = rect.height;
28
+ const isOffScreenRight =
29
+ clientX + tooltipWidth + offset > window.innerWidth;
30
+ const isOffScreenBottom =
31
+ clientY + tooltipHeight + offset > window.innerHeight;
32
+ const x = isOffScreenRight
33
+ ? clientX - tooltipWidth - offset
34
+ : clientX + offset;
35
+ const y = isOffScreenBottom
36
+ ? clientY - tooltipHeight - offset
37
+ : clientY + offset;
38
+
39
+ current.style.transform = `translate(${x}px, ${y}px)`;
40
+ current.style.opacity = '1';
41
+ };
42
+
43
+ window.addEventListener('mousemove', handleMouseMove);
44
+
45
+ return () => {
46
+ window.removeEventListener('mousemove', handleMouseMove);
47
+ };
48
+ }
49
+
50
+ return;
51
+ }, []);
52
+
53
+ return (
54
+ <ModalPortal>
55
+ <Container ref={ref}>
56
+ <SpellInfoDisplay spell={spell} />
57
+ </Container>
58
+ </ModalPortal>
59
+ );
60
+ };
61
+
62
+ const Container = styled.div`
63
+ position: absolute;
64
+ z-index: 100;
65
+ pointer-events: none;
66
+ left: 0;
67
+ top: 0;
68
+ opacity: 0;
69
+ transition: opacity 0.08s;
70
+ `;
@@ -1,8 +1,8 @@
1
- import { IShortcut, ShortcutType } from '@rpg-engine/shared';
2
-
3
- export const SHORTCUTS_STORAGE_KEY = 'shortcuts';
4
-
5
- export const defaultShortcut: IShortcut = {
6
- type: ShortcutType.None,
7
- payload: null,
1
+ import { IShortcut, ShortcutType } from '@rpg-engine/shared';
2
+
3
+ export const SHORTCUTS_STORAGE_KEY = 'shortcuts';
4
+
5
+ export const defaultShortcut: IShortcut = {
6
+ type: ShortcutType.None,
7
+ payload: null,
8
8
  };