@rpg-engine/long-bow 0.3.69 → 0.3.71

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 (158) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/components/CraftBook/CraftBook.d.ts +2 -1
  4. package/dist/components/Item/Cards/ItemInfo.d.ts +10 -0
  5. package/dist/components/Item/Cards/ItemInfoDisplay.d.ts +9 -0
  6. package/dist/components/Item/Cards/ItemInfoWrapper.d.ts +11 -0
  7. package/dist/components/Item/Cards/ItemTooltip.d.ts +7 -4
  8. package/dist/components/Item/Inventory/ItemContainer.d.ts +2 -1
  9. package/dist/components/Item/Inventory/ItemSlot.d.ts +4 -1
  10. package/dist/components/TradingMenu/TradingItemRow.d.ts +2 -1
  11. package/dist/components/TradingMenu/TradingMenu.d.ts +4 -3
  12. package/dist/components/shared/SpriteFromAtlas.d.ts +1 -0
  13. package/dist/long-bow.cjs.development.js +1220 -949
  14. package/dist/long-bow.cjs.development.js.map +1 -1
  15. package/dist/long-bow.cjs.production.min.js +1 -1
  16. package/dist/long-bow.cjs.production.min.js.map +1 -1
  17. package/dist/long-bow.esm.js +1222 -953
  18. package/dist/long-bow.esm.js.map +1 -1
  19. package/dist/stories/ItemInfoDisplay.stories.d.ts +8 -0
  20. package/dist/stories/TradingMenu.stories.d.ts +2 -2
  21. package/package.json +100 -100
  22. package/src/components/Abstractions/SlotsContainer.tsx +45 -45
  23. package/src/components/Arrow/SelectArrow.tsx +69 -69
  24. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  25. package/src/components/Arrow/img/arrow01-left.png +0 -0
  26. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  27. package/src/components/Arrow/img/arrow01-right.png +0 -0
  28. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  29. package/src/components/Arrow/img/arrow02-left.png +0 -0
  30. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  31. package/src/components/Arrow/img/arrow02-right.png +0 -0
  32. package/src/components/Button.tsx +40 -40
  33. package/src/components/Character/CharacterSelection.tsx +96 -96
  34. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  35. package/src/components/Chat/Chat.tsx +195 -195
  36. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  37. package/src/components/CheckButton.tsx +65 -65
  38. package/src/components/CircularController/CircularController.tsx +248 -248
  39. package/src/components/CraftBook/CraftBook.tsx +237 -227
  40. package/src/components/CraftBook/MockItems.ts +41 -46
  41. package/src/components/DraggableContainer.tsx +153 -153
  42. package/src/components/Dropdown.tsx +90 -90
  43. package/src/components/DropdownSelectorContainer.tsx +42 -42
  44. package/src/components/Equipment/EquipmentSet.tsx +190 -190
  45. package/src/components/HistoryDialog.tsx +104 -104
  46. package/src/components/Input.tsx +15 -15
  47. package/src/components/Item/Cards/ItemInfo.tsx +248 -0
  48. package/src/components/Item/Cards/ItemInfoDisplay.tsx +120 -0
  49. package/src/components/Item/Cards/ItemInfoWrapper.tsx +39 -0
  50. package/src/components/Item/Cards/ItemTooltip.tsx +85 -33
  51. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  52. package/src/components/Item/Inventory/ItemContainer.tsx +214 -210
  53. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  54. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  55. package/src/components/Item/Inventory/ItemSlot.tsx +512 -501
  56. package/src/components/Item/Inventory/itemContainerHelper.ts +156 -156
  57. package/src/components/ListMenu.tsx +63 -63
  58. package/src/components/Multitab/Tab.tsx +66 -66
  59. package/src/components/Multitab/TabBody.tsx +13 -13
  60. package/src/components/Multitab/TabsContainer.tsx +97 -97
  61. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  62. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  63. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  64. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  65. package/src/components/ProgressBar.tsx +92 -92
  66. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  67. package/src/components/QuestInfo/QuestInfo.tsx +230 -230
  68. package/src/components/QuestList.tsx +129 -129
  69. package/src/components/RPGUIContainer.tsx +47 -47
  70. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  71. package/src/components/RPGUIRoot.tsx +14 -14
  72. package/src/components/RadioButton.tsx +53 -53
  73. package/src/components/RadioInput/RadioButton.tsx +96 -96
  74. package/src/components/RadioInput/RadioInput.tsx +102 -102
  75. package/src/components/RadioInput/instruments.ts +15 -15
  76. package/src/components/RangeSlider.tsx +78 -78
  77. package/src/components/RelativeListMenu.tsx +83 -83
  78. package/src/components/ScrollList.tsx +79 -79
  79. package/src/components/Shortcuts/Shortcuts.tsx +151 -151
  80. package/src/components/Shortcuts/ShortcutsSetter.tsx +132 -132
  81. package/src/components/Shortcuts/SingleShortcut.ts +62 -62
  82. package/src/components/SimpleProgressBar.tsx +62 -62
  83. package/src/components/SkillProgressBar.tsx +133 -133
  84. package/src/components/SkillsContainer.tsx +198 -198
  85. package/src/components/Spellbook/Spell.tsx +201 -201
  86. package/src/components/Spellbook/Spellbook.tsx +150 -150
  87. package/src/components/Spellbook/constants.ts +8 -8
  88. package/src/components/Spellbook/mockSpells.ts +60 -60
  89. package/src/components/StaticBook/StaticBook.tsx +103 -103
  90. package/src/components/TextArea.tsx +11 -11
  91. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  92. package/src/components/TimeWidget/TimeWidget.tsx +63 -63
  93. package/src/components/TradingMenu/TradingItemRow.tsx +195 -181
  94. package/src/components/TradingMenu/TradingMenu.tsx +211 -203
  95. package/src/components/TradingMenu/items.mock.ts +48 -96
  96. package/src/components/Truncate.tsx +25 -25
  97. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  98. package/src/components/shared/Column.tsx +16 -16
  99. package/src/components/shared/Ellipsis.tsx +65 -65
  100. package/src/components/shared/SpriteFromAtlas.tsx +104 -102
  101. package/src/components/typography/DynamicText.tsx +49 -49
  102. package/src/constants/uiColors.ts +20 -20
  103. package/src/constants/uiDevices.ts +3 -3
  104. package/src/constants/uiFonts.ts +12 -12
  105. package/src/hooks/useEventListener.ts +21 -21
  106. package/src/hooks/useOutsideAlerter.ts +25 -25
  107. package/src/index.tsx +40 -40
  108. package/src/libs/StringHelpers.ts +3 -3
  109. package/src/mocks/atlas/entities/entities.json +20215 -20215
  110. package/src/mocks/atlas/icons/icons.json +735 -735
  111. package/src/mocks/atlas/items/items.json +12086 -12086
  112. package/src/mocks/equipmentSet.mocks.ts +391 -393
  113. package/src/mocks/itemContainer.mocks.ts +563 -562
  114. package/src/mocks/skills.mocks.ts +128 -128
  115. package/src/stories/Arrow.stories.tsx +26 -26
  116. package/src/stories/Button.stories.tsx +36 -36
  117. package/src/stories/CharacterSelection.stories.tsx +45 -45
  118. package/src/stories/CharacterStatus.stories.tsx +29 -29
  119. package/src/stories/Chat.stories.tsx +187 -187
  120. package/src/stories/ChatDeprecated.stories.tsx +170 -170
  121. package/src/stories/CheckButton.stories.tsx +48 -48
  122. package/src/stories/CircullarController.stories.tsx +37 -37
  123. package/src/stories/CraftBook.stories.tsx +42 -40
  124. package/src/stories/DayNightPeriod.stories.tsx +27 -27
  125. package/src/stories/DraggableContainer.stories.tsx +28 -28
  126. package/src/stories/Dropdown.stories.tsx +46 -46
  127. package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
  128. package/src/stories/EquipmentSet.stories.tsx +65 -65
  129. package/src/stories/HistoryDialog.stories.tsx +61 -61
  130. package/src/stories/ItemContainer.stories.tsx +200 -198
  131. package/src/stories/ItemInfoDisplay.stories.tsx +33 -0
  132. package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
  133. package/src/stories/ItemSelector.stories.tsx +77 -77
  134. package/src/stories/ItemTradingComponent.stories.tsx +35 -35
  135. package/src/stories/ListMenu.stories.tsx +56 -56
  136. package/src/stories/Multitab.stories.tsx +51 -51
  137. package/src/stories/NPCDialog.stories.tsx +130 -130
  138. package/src/stories/NPCMultiDialog.stories.tsx +71 -71
  139. package/src/stories/ProgressBar.stories.tsx +23 -23
  140. package/src/stories/PropertySelect.stories.tsx +40 -40
  141. package/src/stories/QuestInfo.stories.tsx +107 -107
  142. package/src/stories/QuestList.stories.tsx +82 -82
  143. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  144. package/src/stories/RadioButton.stories.tsx +49 -49
  145. package/src/stories/RadioInput.stories.tsx +34 -34
  146. package/src/stories/RangeSlider.stories.tsx +64 -64
  147. package/src/stories/ScrollList.stories.tsx +85 -85
  148. package/src/stories/Shortcuts.stories.tsx +39 -39
  149. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  150. package/src/stories/SkillProgressBar.stories.tsx +34 -34
  151. package/src/stories/SkillsContainer.stories.tsx +35 -35
  152. package/src/stories/Spellbook.stories.tsx +104 -104
  153. package/src/stories/StaticBook.stories.tsx +32 -32
  154. package/src/stories/Text.stories.tsx +42 -42
  155. package/src/stories/TimeWidget.stories.tsx +27 -27
  156. package/src/stories/TradingMenu.stories.tsx +47 -45
  157. package/src/types/eventTypes.ts +4 -4
  158. package/src/types/index.d.ts +2 -2
@@ -1,136 +1,136 @@
1
- import React, { useEffect, useState } from 'react';
2
- import styled from 'styled-components';
3
- import { Button, ButtonTypes } from '../Button';
4
- import { DraggableContainer } from '../DraggableContainer';
5
- import { RPGUIContainerTypes } from '../RPGUIContainer';
6
- import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
7
-
8
- export interface IOptionsItemSelectorProps {
9
- name: string;
10
- description?: string;
11
- imageKey: string;
12
- }
13
-
14
- export interface IItemSelectorProps {
15
- atlasJSON: any;
16
- atlasIMG: any;
17
- options: IOptionsItemSelectorProps[];
18
- onClose: () => void;
19
- onSelect: (value: string) => void;
20
- }
21
-
22
- export const ItemSelector: React.FC<IItemSelectorProps> = ({
23
- atlasIMG,
24
- atlasJSON,
25
- options,
26
- onClose,
27
- onSelect,
28
- }) => {
29
- const [selectedValue, setSelectedValue] = useState<string>();
30
-
31
- const handleClick = () => {
32
- let element = document.querySelector(
33
- `input[name='test']:checked`
34
- ) as HTMLInputElement;
35
- const elementValue = element.value;
36
- setSelectedValue(elementValue);
37
- };
38
-
39
- useEffect(() => {
40
- if (selectedValue) {
41
- onSelect(selectedValue);
42
- }
43
- }, [selectedValue]);
44
- return (
45
- <DraggableContainer
46
- type={RPGUIContainerTypes.Framed}
47
- width="500px"
48
- cancelDrag=".equipment-container-body .arrow-selector"
49
- onCloseButton={() => {
50
- if (onClose) {
51
- onClose();
52
- }
53
- }}
54
- >
55
- <div style={{ width: '100%' }}>
56
- <Title>{'Harvesting instruments'}</Title>
57
- <Subtitle>{'Use the tool, you need it'}</Subtitle>
58
- <hr className="golden" />
59
- </div>
60
-
61
- <RadioInputScroller>
62
- {options?.map((option, index) => (
63
- <RadioOptionsWrapper key={index}>
64
- <SpriteAtlasWrapper>
65
- <SpriteFromAtlas
66
- atlasIMG={atlasIMG}
67
- atlasJSON={atlasJSON}
68
- spriteKey={option.imageKey}
69
- imgScale={3}
70
- />
71
- </SpriteAtlasWrapper>
72
- <div>
73
- <input
74
- className="rpgui-radio"
75
- type="radio"
76
- value={option.name}
77
- name="test"
78
- />
79
- <label
80
- onPointerDown={handleClick}
81
- style={{ display: 'flex', alignItems: 'center' }}
82
- >
83
- {option.name} <br />
84
- {option.description}
85
- </label>
86
- </div>
87
- </RadioOptionsWrapper>
88
- ))}
89
- </RadioInputScroller>
90
- <ButtonWrapper>
91
- <Button buttonType={ButtonTypes.RPGUIButton} onPointerDown={onClose}>
92
- Cancel
93
- </Button>
94
- <Button buttonType={ButtonTypes.RPGUIButton}>Select</Button>
95
- </ButtonWrapper>
96
- </DraggableContainer>
97
- );
98
- };
99
-
100
- const Title = styled.h1`
101
- font-size: 0.6rem;
102
- color: yellow !important;
103
- `;
104
- const Subtitle = styled.h1`
105
- font-size: 0.4rem;
106
- color: yellow !important;
107
- `;
108
-
109
- const RadioInputScroller = styled.div`
110
- padding-left: 15px;
111
- padding-top: 10px;
112
- width: 100%;
113
- margin-top: 1rem;
114
- align-items: center;
115
- margin-left: 20px;
116
- align-items: flex-start;
117
- overflow-y: scroll;
118
- height: 360px;
119
- `;
120
-
121
- const SpriteAtlasWrapper = styled.div`
122
- margin-right: 40px;
123
- `;
124
-
125
- const RadioOptionsWrapper = styled.div`
126
- display: flex;
127
- align-items: stretch;
128
- margin-bottom: 40px;
129
- `;
130
-
131
- const ButtonWrapper = styled.div`
132
- display: flex;
133
- justify-content: space-around;
134
- padding-top: 20px;
135
- width: 100%;
136
- `;
1
+ import React, { useEffect, useState } from 'react';
2
+ import styled from 'styled-components';
3
+ import { Button, ButtonTypes } from '../Button';
4
+ import { DraggableContainer } from '../DraggableContainer';
5
+ import { RPGUIContainerTypes } from '../RPGUIContainer';
6
+ import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
7
+
8
+ export interface IOptionsItemSelectorProps {
9
+ name: string;
10
+ description?: string;
11
+ imageKey: string;
12
+ }
13
+
14
+ export interface IItemSelectorProps {
15
+ atlasJSON: any;
16
+ atlasIMG: any;
17
+ options: IOptionsItemSelectorProps[];
18
+ onClose: () => void;
19
+ onSelect: (value: string) => void;
20
+ }
21
+
22
+ export const ItemSelector: React.FC<IItemSelectorProps> = ({
23
+ atlasIMG,
24
+ atlasJSON,
25
+ options,
26
+ onClose,
27
+ onSelect,
28
+ }) => {
29
+ const [selectedValue, setSelectedValue] = useState<string>();
30
+
31
+ const handleClick = () => {
32
+ let element = document.querySelector(
33
+ `input[name='test']:checked`
34
+ ) as HTMLInputElement;
35
+ const elementValue = element.value;
36
+ setSelectedValue(elementValue);
37
+ };
38
+
39
+ useEffect(() => {
40
+ if (selectedValue) {
41
+ onSelect(selectedValue);
42
+ }
43
+ }, [selectedValue]);
44
+ return (
45
+ <DraggableContainer
46
+ type={RPGUIContainerTypes.Framed}
47
+ width="500px"
48
+ cancelDrag=".equipment-container-body .arrow-selector"
49
+ onCloseButton={() => {
50
+ if (onClose) {
51
+ onClose();
52
+ }
53
+ }}
54
+ >
55
+ <div style={{ width: '100%' }}>
56
+ <Title>{'Harvesting instruments'}</Title>
57
+ <Subtitle>{'Use the tool, you need it'}</Subtitle>
58
+ <hr className="golden" />
59
+ </div>
60
+
61
+ <RadioInputScroller>
62
+ {options?.map((option, index) => (
63
+ <RadioOptionsWrapper key={index}>
64
+ <SpriteAtlasWrapper>
65
+ <SpriteFromAtlas
66
+ atlasIMG={atlasIMG}
67
+ atlasJSON={atlasJSON}
68
+ spriteKey={option.imageKey}
69
+ imgScale={3}
70
+ />
71
+ </SpriteAtlasWrapper>
72
+ <div>
73
+ <input
74
+ className="rpgui-radio"
75
+ type="radio"
76
+ value={option.name}
77
+ name="test"
78
+ />
79
+ <label
80
+ onPointerDown={handleClick}
81
+ style={{ display: 'flex', alignItems: 'center' }}
82
+ >
83
+ {option.name} <br />
84
+ {option.description}
85
+ </label>
86
+ </div>
87
+ </RadioOptionsWrapper>
88
+ ))}
89
+ </RadioInputScroller>
90
+ <ButtonWrapper>
91
+ <Button buttonType={ButtonTypes.RPGUIButton} onPointerDown={onClose}>
92
+ Cancel
93
+ </Button>
94
+ <Button buttonType={ButtonTypes.RPGUIButton}>Select</Button>
95
+ </ButtonWrapper>
96
+ </DraggableContainer>
97
+ );
98
+ };
99
+
100
+ const Title = styled.h1`
101
+ font-size: 0.6rem;
102
+ color: yellow !important;
103
+ `;
104
+ const Subtitle = styled.h1`
105
+ font-size: 0.4rem;
106
+ color: yellow !important;
107
+ `;
108
+
109
+ const RadioInputScroller = styled.div`
110
+ padding-left: 15px;
111
+ padding-top: 10px;
112
+ width: 100%;
113
+ margin-top: 1rem;
114
+ align-items: center;
115
+ margin-left: 20px;
116
+ align-items: flex-start;
117
+ overflow-y: scroll;
118
+ height: 360px;
119
+ `;
120
+
121
+ const SpriteAtlasWrapper = styled.div`
122
+ margin-right: 40px;
123
+ `;
124
+
125
+ const RadioOptionsWrapper = styled.div`
126
+ display: flex;
127
+ align-items: stretch;
128
+ margin-bottom: 40px;
129
+ `;
130
+
131
+ const ButtonWrapper = styled.div`
132
+ display: flex;
133
+ justify-content: space-around;
134
+ padding-top: 20px;
135
+ width: 100%;
136
+ `;
@@ -1,16 +1,16 @@
1
- import styled from 'styled-components';
2
-
3
- interface IColumn {
4
- flex?: number;
5
- alignItems?: string;
6
- justifyContent?: string;
7
- flexWrap?: string;
8
- }
9
-
10
- export const Column = styled.div<IColumn>`
11
- flex: ${props => props.flex || 'auto'};
12
- display: flex;
13
- flex-wrap: ${props => props.flexWrap || 'nowrap'};
14
- align-items: ${props => props.alignItems || 'flex-start'};
15
- justify-content: ${props => props.justifyContent || 'flex-start'};
16
- `;
1
+ import styled from 'styled-components';
2
+
3
+ interface IColumn {
4
+ flex?: number;
5
+ alignItems?: string;
6
+ justifyContent?: string;
7
+ flexWrap?: string;
8
+ }
9
+
10
+ export const Column = styled.div<IColumn>`
11
+ flex: ${props => props.flex || 'auto'};
12
+ display: flex;
13
+ flex-wrap: ${props => props.flexWrap || 'nowrap'};
14
+ align-items: ${props => props.alignItems || 'flex-start'};
15
+ justify-content: ${props => props.justifyContent || 'flex-start'};
16
+ `;
@@ -1,65 +1,65 @@
1
- import React from 'react';
2
- import styled from 'styled-components';
3
-
4
- interface IProps {
5
- children: React.ReactNode;
6
- maxLines: 1 | 2 | 3;
7
- maxWidth: string;
8
- fontSize?: string;
9
- center?: boolean;
10
- }
11
-
12
- export const Ellipsis = ({
13
- children,
14
- maxLines,
15
- maxWidth,
16
- fontSize,
17
- center,
18
- }: IProps) => {
19
- return (
20
- <Container maxWidth={maxWidth} fontSize={fontSize} center={center}>
21
- <div className={`ellipsis-${maxLines}-lines`}>{children}</div>
22
- </Container>
23
- );
24
- };
25
-
26
- interface IContainerProps {
27
- maxWidth?: string;
28
- fontSize?: string;
29
- center?: boolean;
30
- }
31
-
32
- const Container = styled.div<IContainerProps>`
33
- .ellipsis-1-lines {
34
- white-space: nowrap;
35
- text-overflow: ellipsis;
36
- overflow: hidden;
37
- max-width: ${props => props.maxWidth};
38
-
39
- ${props => props.center && `margin: 0 auto;`}
40
- }
41
- .ellipsis-2-lines {
42
- display: -webkit-box;
43
- max-width: ${props => props.maxWidth}px;
44
-
45
- height: 25px;
46
- margin: 0 auto;
47
- line-height: 1;
48
- -webkit-line-clamp: 2;
49
- -webkit-box-orient: vertical;
50
- text-overflow: ellipsis;
51
- overflow: hidden;
52
- }
53
- .ellipsis-3-lines {
54
- display: -webkit-box;
55
- max-width: ${props => props.maxWidth}px;
56
-
57
- height: 43px;
58
- margin: 0 auto;
59
- line-height: 1;
60
- -webkit-line-clamp: 3;
61
- -webkit-box-orient: vertical;
62
- text-overflow: ellipsis;
63
- overflow: hidden;
64
- }
65
- `;
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ interface IProps {
5
+ children: React.ReactNode;
6
+ maxLines: 1 | 2 | 3;
7
+ maxWidth: string;
8
+ fontSize?: string;
9
+ center?: boolean;
10
+ }
11
+
12
+ export const Ellipsis = ({
13
+ children,
14
+ maxLines,
15
+ maxWidth,
16
+ fontSize,
17
+ center,
18
+ }: IProps) => {
19
+ return (
20
+ <Container maxWidth={maxWidth} fontSize={fontSize} center={center}>
21
+ <div className={`ellipsis-${maxLines}-lines`}>{children}</div>
22
+ </Container>
23
+ );
24
+ };
25
+
26
+ interface IContainerProps {
27
+ maxWidth?: string;
28
+ fontSize?: string;
29
+ center?: boolean;
30
+ }
31
+
32
+ const Container = styled.div<IContainerProps>`
33
+ .ellipsis-1-lines {
34
+ white-space: nowrap;
35
+ text-overflow: ellipsis;
36
+ overflow: hidden;
37
+ max-width: ${props => props.maxWidth};
38
+
39
+ ${props => props.center && `margin: 0 auto;`}
40
+ }
41
+ .ellipsis-2-lines {
42
+ display: -webkit-box;
43
+ max-width: ${props => props.maxWidth}px;
44
+
45
+ height: 25px;
46
+ margin: 0 auto;
47
+ line-height: 1;
48
+ -webkit-line-clamp: 2;
49
+ -webkit-box-orient: vertical;
50
+ text-overflow: ellipsis;
51
+ overflow: hidden;
52
+ }
53
+ .ellipsis-3-lines {
54
+ display: -webkit-box;
55
+ max-width: ${props => props.maxWidth}px;
56
+
57
+ height: 43px;
58
+ margin: 0 auto;
59
+ line-height: 1;
60
+ -webkit-line-clamp: 3;
61
+ -webkit-box-orient: vertical;
62
+ text-overflow: ellipsis;
63
+ overflow: hidden;
64
+ }
65
+ `;
@@ -1,102 +1,104 @@
1
- import { GRID_HEIGHT, GRID_WIDTH } from '@rpg-engine/shared';
2
- import React from 'react';
3
- import styled from 'styled-components';
4
-
5
- interface IProps {
6
- atlasJSON: any;
7
- atlasIMG: any;
8
- spriteKey: string;
9
- width?: number;
10
- height?: number;
11
- grayScale?: boolean;
12
- opacity?: number;
13
- onPointerDown?: () => void;
14
- containerStyle?: any;
15
- imgStyle?: any;
16
- imgScale?: number;
17
- }
18
-
19
- export const SpriteFromAtlas: React.FC<IProps> = ({
20
- atlasJSON,
21
- atlasIMG,
22
- spriteKey,
23
- width = GRID_WIDTH,
24
- height = GRID_HEIGHT,
25
- imgScale = 2,
26
- imgStyle,
27
- onPointerDown,
28
- containerStyle,
29
- grayScale = false,
30
- opacity = 1,
31
- }) => {
32
- //! If an item is not showing, remember that you MUST run yarn atlas:copy everytime you add a new item to the atlas (it will sync our public folder atlas with src/atlas).
33
- //!Due to React's limitations, we cannot import it from the public folder directly!
34
-
35
- const spriteData =
36
- atlasJSON.frames[spriteKey] || atlasJSON.frames['others/no-image.png'];
37
-
38
- if (!spriteData) throw new Error(`Sprite ${spriteKey} not found in atlas!`);
39
-
40
- return (
41
- <Container
42
- width={width}
43
- height={height}
44
- hasHover={grayScale}
45
- onPointerDown={onPointerDown}
46
- style={containerStyle}
47
- >
48
- <ImgSprite
49
- className="sprite-from-atlas-img"
50
- atlasIMG={atlasIMG}
51
- frame={spriteData.frame}
52
- scale={imgScale}
53
- grayScale={grayScale}
54
- opacity={opacity}
55
- style={imgStyle}
56
- />
57
- </Container>
58
- );
59
- };
60
-
61
- interface IImgSpriteProps {
62
- atlasIMG: any;
63
- frame: {
64
- x: number;
65
- y: number;
66
- w: number;
67
- h: number;
68
- };
69
- scale: number;
70
- grayScale: boolean;
71
- opacity: number;
72
- }
73
-
74
- interface IContainerProps {
75
- width: number;
76
- height: number;
77
- hasHover: boolean;
78
- }
79
-
80
- const Container = styled.div`
81
- width: ${(props: IContainerProps) => props.width}px;
82
- height: ${(props: IContainerProps) => props.height}px;
83
- ${(props: IContainerProps) =>
84
- !props.hasHover
85
- ? `&:hover {
86
- filter: sepia(100%) saturate(300%) brightness(70%) hue-rotate(180deg);
87
- }`
88
- : ``}
89
- `;
90
-
91
- const ImgSprite = styled.div<IImgSpriteProps>`
92
- width: ${props => props.frame.w}px;
93
- height: ${props => props.frame.h}px;
94
- background-image: url(${props => props.atlasIMG});
95
- background-position: -${props => props.frame.x}px -${props => props.frame.y}px;
96
- transform: scale(${props => props.scale});
97
- position: relative;
98
- top: 8px;
99
- left: 8px;
100
- filter: ${props => (props.grayScale ? 'grayscale(100%)' : 'none')};
101
- opacity: ${props => props.opacity};
102
- `;
1
+ import { GRID_HEIGHT, GRID_WIDTH } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ import styled from 'styled-components';
4
+
5
+ interface IProps {
6
+ atlasJSON: any;
7
+ atlasIMG: any;
8
+ spriteKey: string;
9
+ width?: number;
10
+ height?: number;
11
+ grayScale?: boolean;
12
+ opacity?: number;
13
+ onPointerDown?: () => void;
14
+ containerStyle?: any;
15
+ imgStyle?: any;
16
+ imgScale?: number;
17
+ imgClassname?: string;
18
+ }
19
+
20
+ export const SpriteFromAtlas: React.FC<IProps> = ({
21
+ atlasJSON,
22
+ atlasIMG,
23
+ spriteKey,
24
+ width = GRID_WIDTH,
25
+ height = GRID_HEIGHT,
26
+ imgScale = 2,
27
+ imgStyle,
28
+ onPointerDown,
29
+ containerStyle,
30
+ grayScale = false,
31
+ opacity = 1,
32
+ imgClassname,
33
+ }) => {
34
+ //! If an item is not showing, remember that you MUST run yarn atlas:copy everytime you add a new item to the atlas (it will sync our public folder atlas with src/atlas).
35
+ //!Due to React's limitations, we cannot import it from the public folder directly!
36
+
37
+ const spriteData =
38
+ atlasJSON.frames[spriteKey] || atlasJSON.frames['others/no-image.png'];
39
+
40
+ if (!spriteData) throw new Error(`Sprite ${spriteKey} not found in atlas!`);
41
+
42
+ return (
43
+ <Container
44
+ width={width}
45
+ height={height}
46
+ hasHover={grayScale}
47
+ onPointerDown={onPointerDown}
48
+ style={containerStyle}
49
+ >
50
+ <ImgSprite
51
+ className={`sprite-from-atlas-img ${imgClassname || ''}`}
52
+ atlasIMG={atlasIMG}
53
+ frame={spriteData.frame}
54
+ scale={imgScale}
55
+ grayScale={grayScale}
56
+ opacity={opacity}
57
+ style={imgStyle}
58
+ />
59
+ </Container>
60
+ );
61
+ };
62
+
63
+ interface IImgSpriteProps {
64
+ atlasIMG: any;
65
+ frame: {
66
+ x: number;
67
+ y: number;
68
+ w: number;
69
+ h: number;
70
+ };
71
+ scale: number;
72
+ grayScale: boolean;
73
+ opacity: number;
74
+ }
75
+
76
+ interface IContainerProps {
77
+ width: number;
78
+ height: number;
79
+ hasHover: boolean;
80
+ }
81
+
82
+ const Container = styled.div`
83
+ width: ${(props: IContainerProps) => props.width}px;
84
+ height: ${(props: IContainerProps) => props.height}px;
85
+ ${(props: IContainerProps) =>
86
+ !props.hasHover
87
+ ? `&:hover {
88
+ filter: sepia(100%) saturate(300%) brightness(70%) hue-rotate(180deg);
89
+ }`
90
+ : ``}
91
+ `;
92
+
93
+ const ImgSprite = styled.div<IImgSpriteProps>`
94
+ width: ${props => props.frame.w}px;
95
+ height: ${props => props.frame.h}px;
96
+ background-image: url(${props => props.atlasIMG});
97
+ background-position: -${props => props.frame.x}px -${props => props.frame.y}px;
98
+ transform: scale(${props => props.scale});
99
+ position: relative;
100
+ top: 8px;
101
+ left: 8px;
102
+ filter: ${props => (props.grayScale ? 'grayscale(100%)' : 'none')};
103
+ opacity: ${props => props.opacity};
104
+ `;