@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,150 +1,150 @@
1
- import { IRawSpell, IShortcut } from '@rpg-engine/shared';
2
- import React, { Fragment, useEffect, useMemo, useState } from 'react';
3
- import styled from 'styled-components';
4
- import { uiFonts } from '../../constants/uiFonts';
5
- import { DraggableContainer } from '../DraggableContainer';
6
- import { Input } from '../Input';
7
- import { RPGUIContainerTypes } from '../RPGUIContainer';
8
- import { ShortcutsSetter } from '../Shortcuts/ShortcutsSetter';
9
- import { Spell } from './Spell';
10
-
11
- export interface ISpellbookProps {
12
- onClose?: () => void;
13
- onInputFocus?: () => void;
14
- onInputBlur?: () => void;
15
- spells: IRawSpell[];
16
- magicLevel: number;
17
- mana: number;
18
- onSpellClick: (spellKey: string) => void;
19
- setSpellShortcut: (key: string, index: number) => void;
20
- shortcuts: IShortcut[];
21
- removeShortcut: (index: number) => void;
22
- atlasIMG: any;
23
- atlasJSON: any;
24
- }
25
-
26
- export const Spellbook: React.FC<ISpellbookProps> = ({
27
- onClose,
28
- onInputFocus,
29
- onInputBlur,
30
- spells,
31
- magicLevel,
32
- mana,
33
- onSpellClick,
34
- setSpellShortcut,
35
- shortcuts,
36
- removeShortcut,
37
- atlasIMG,
38
- atlasJSON,
39
- }) => {
40
- const [search, setSearch] = useState('');
41
- const [settingShortcutIndex, setSettingShortcutIndex] = useState(-1);
42
-
43
- useEffect(() => {
44
- const handleEscapeClose = (e: KeyboardEvent) => {
45
- if (e.key === 'Escape') {
46
- onClose?.();
47
- }
48
- };
49
-
50
- document.addEventListener('keydown', handleEscapeClose);
51
-
52
- return () => {
53
- document.removeEventListener('keydown', handleEscapeClose);
54
- };
55
- }, [onClose]);
56
-
57
- const spellsToDisplay = useMemo(() => {
58
- return spells
59
- .sort((a, b) => {
60
- if (a.minMagicLevelRequired > b.minMagicLevelRequired) return 1;
61
- if (a.minMagicLevelRequired < b.minMagicLevelRequired) return -1;
62
- return 0;
63
- })
64
- .filter(
65
- spell =>
66
- spell.name.toLocaleLowerCase().includes(search.toLocaleLowerCase()) ||
67
- spell.magicWords
68
- .toLocaleLowerCase()
69
- .includes(search.toLocaleLowerCase())
70
- );
71
- }, [search, spells]);
72
-
73
- const setShortcut = (spellKey: string) => {
74
- setSpellShortcut?.(spellKey, settingShortcutIndex);
75
- setSettingShortcutIndex(-1);
76
- };
77
-
78
- return (
79
- <DraggableContainer
80
- type={RPGUIContainerTypes.Framed}
81
- onCloseButton={onClose}
82
- width="inherit"
83
- height="inherit"
84
- cancelDrag="#spellbook-search, #shortcuts_list, .spell"
85
- >
86
- <Container>
87
- <Title>Learned Spells</Title>
88
-
89
- <ShortcutsSetter
90
- setSettingShortcutIndex={setSettingShortcutIndex}
91
- settingShortcutIndex={settingShortcutIndex}
92
- shortcuts={shortcuts}
93
- removeShortcut={removeShortcut}
94
- atlasIMG={atlasIMG}
95
- atlasJSON={atlasJSON}
96
- />
97
-
98
- <Input
99
- placeholder="Search for spell"
100
- value={search}
101
- onChange={e => setSearch(e.target.value)}
102
- onFocus={onInputFocus}
103
- onBlur={onInputBlur}
104
- id="spellbook-search"
105
- />
106
-
107
- <SpellList>
108
- {spellsToDisplay.map(spell => (
109
- <Fragment key={spell.key}>
110
- <Spell
111
- charMana={mana}
112
- charMagicLevel={magicLevel}
113
- onPointerDown={
114
- settingShortcutIndex !== -1 ? setShortcut : onSpellClick
115
- }
116
- spellKey={spell.key}
117
- isSettingShortcut={settingShortcutIndex !== -1}
118
- {...spell}
119
- />
120
- </Fragment>
121
- ))}
122
- </SpellList>
123
- </Container>
124
- </DraggableContainer>
125
- );
126
- };
127
-
128
- const Title = styled.h1`
129
- font-size: ${uiFonts.size.large} !important;
130
- margin-bottom: 0 !important;
131
- `;
132
-
133
- const Container = styled.div`
134
- width: 100%;
135
- height: 100%;
136
- color: white;
137
- display: flex;
138
- flex-direction: column;
139
- `;
140
-
141
- const SpellList = styled.div`
142
- width: 100%;
143
- min-height: 0;
144
- flex: 1;
145
- overflow-y: auto;
146
- display: flex;
147
- flex-direction: column;
148
- gap: 1.5rem;
149
- margin-top: 1rem;
150
- `;
1
+ import { IRawSpell, IShortcut } from '@rpg-engine/shared';
2
+ import React, { Fragment, useEffect, useMemo, useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import { uiFonts } from '../../constants/uiFonts';
5
+ import { DraggableContainer } from '../DraggableContainer';
6
+ import { Input } from '../Input';
7
+ import { RPGUIContainerTypes } from '../RPGUIContainer';
8
+ import { ShortcutsSetter } from '../Shortcuts/ShortcutsSetter';
9
+ import { Spell } from './Spell';
10
+
11
+ export interface ISpellbookProps {
12
+ onClose?: () => void;
13
+ onInputFocus?: () => void;
14
+ onInputBlur?: () => void;
15
+ spells: IRawSpell[];
16
+ magicLevel: number;
17
+ mana: number;
18
+ onSpellClick: (spellKey: string) => void;
19
+ setSpellShortcut: (key: string, index: number) => void;
20
+ shortcuts: IShortcut[];
21
+ removeShortcut: (index: number) => void;
22
+ atlasIMG: any;
23
+ atlasJSON: any;
24
+ }
25
+
26
+ export const Spellbook: React.FC<ISpellbookProps> = ({
27
+ onClose,
28
+ onInputFocus,
29
+ onInputBlur,
30
+ spells,
31
+ magicLevel,
32
+ mana,
33
+ onSpellClick,
34
+ setSpellShortcut,
35
+ shortcuts,
36
+ removeShortcut,
37
+ atlasIMG,
38
+ atlasJSON,
39
+ }) => {
40
+ const [search, setSearch] = useState('');
41
+ const [settingShortcutIndex, setSettingShortcutIndex] = useState(-1);
42
+
43
+ useEffect(() => {
44
+ const handleEscapeClose = (e: KeyboardEvent) => {
45
+ if (e.key === 'Escape') {
46
+ onClose?.();
47
+ }
48
+ };
49
+
50
+ document.addEventListener('keydown', handleEscapeClose);
51
+
52
+ return () => {
53
+ document.removeEventListener('keydown', handleEscapeClose);
54
+ };
55
+ }, [onClose]);
56
+
57
+ const spellsToDisplay = useMemo(() => {
58
+ return spells
59
+ .sort((a, b) => {
60
+ if (a.minMagicLevelRequired > b.minMagicLevelRequired) return 1;
61
+ if (a.minMagicLevelRequired < b.minMagicLevelRequired) return -1;
62
+ return 0;
63
+ })
64
+ .filter(
65
+ spell =>
66
+ spell.name.toLocaleLowerCase().includes(search.toLocaleLowerCase()) ||
67
+ spell.magicWords
68
+ .toLocaleLowerCase()
69
+ .includes(search.toLocaleLowerCase())
70
+ );
71
+ }, [search, spells]);
72
+
73
+ const setShortcut = (spellKey: string) => {
74
+ setSpellShortcut?.(spellKey, settingShortcutIndex);
75
+ setSettingShortcutIndex(-1);
76
+ };
77
+
78
+ return (
79
+ <DraggableContainer
80
+ type={RPGUIContainerTypes.Framed}
81
+ onCloseButton={onClose}
82
+ width="inherit"
83
+ height="inherit"
84
+ cancelDrag="#spellbook-search, #shortcuts_list, .spell"
85
+ >
86
+ <Container>
87
+ <Title>Learned Spells</Title>
88
+
89
+ <ShortcutsSetter
90
+ setSettingShortcutIndex={setSettingShortcutIndex}
91
+ settingShortcutIndex={settingShortcutIndex}
92
+ shortcuts={shortcuts}
93
+ removeShortcut={removeShortcut}
94
+ atlasIMG={atlasIMG}
95
+ atlasJSON={atlasJSON}
96
+ />
97
+
98
+ <Input
99
+ placeholder="Search for spell"
100
+ value={search}
101
+ onChange={e => setSearch(e.target.value)}
102
+ onFocus={onInputFocus}
103
+ onBlur={onInputBlur}
104
+ id="spellbook-search"
105
+ />
106
+
107
+ <SpellList>
108
+ {spellsToDisplay.map(spell => (
109
+ <Fragment key={spell.key}>
110
+ <Spell
111
+ charMana={mana}
112
+ charMagicLevel={magicLevel}
113
+ onPointerDown={
114
+ settingShortcutIndex !== -1 ? setShortcut : onSpellClick
115
+ }
116
+ spellKey={spell.key}
117
+ isSettingShortcut={settingShortcutIndex !== -1}
118
+ {...spell}
119
+ />
120
+ </Fragment>
121
+ ))}
122
+ </SpellList>
123
+ </Container>
124
+ </DraggableContainer>
125
+ );
126
+ };
127
+
128
+ const Title = styled.h1`
129
+ font-size: ${uiFonts.size.large} !important;
130
+ margin-bottom: 0 !important;
131
+ `;
132
+
133
+ const Container = styled.div`
134
+ width: 100%;
135
+ height: 100%;
136
+ color: white;
137
+ display: flex;
138
+ flex-direction: column;
139
+ `;
140
+
141
+ const SpellList = styled.div`
142
+ width: 100%;
143
+ min-height: 0;
144
+ flex: 1;
145
+ overflow-y: auto;
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: 1.5rem;
149
+ margin-top: 1rem;
150
+ `;
@@ -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,
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,
8
+ };
@@ -1,60 +1,60 @@
1
- import { IRawSpell } from '@rpg-engine/shared';
2
-
3
- enum SpellsBlueprint {
4
- SelfHealingSpell = 'self-healing-spell',
5
- FoodCreationSpell = 'food-creation-spell',
6
- ArrowCreationSpell = 'arrow-creation-spell',
7
- BoltCreationSpell = 'bolt-creation-spell',
8
- BlankRuneCreationSpell = 'blank-rune-creation-spell',
9
- SelfHasteSpell = 'self-haste-spell',
10
- FireRuneCreationSpell = 'fire-rune-creation-spell',
11
- HealRuneCreationSpell = 'healing-rune-creation-spell',
12
- PoisonRuneCreationSpell = 'poison-rune-creation-spell',
13
- DarkRuneCreationSpell = 'dark-rune-creation-spell',
14
- GreaterHealingSpell = 'greater-healing-spell',
15
- EnergyBoltCreationSpell = 'energy-bolt-creation-spell',
16
- FireBoltCreationSpell = 'fire-bolt-creation-spell',
17
- }
18
-
19
- export const mockSpells: IRawSpell[] = [
20
- {
21
- key: SpellsBlueprint.ArrowCreationSpell,
22
- name: 'Arrow Creation Spell',
23
- description: 'A spell that creates arrow in your inventory.',
24
- magicWords: 'iquar elandi',
25
- manaCost: 10,
26
- minMagicLevelRequired: 3,
27
- },
28
- {
29
- key: SpellsBlueprint.BlankRuneCreationSpell,
30
- name: 'Blank Rune Creation Spell',
31
- description: 'A spell that creates a blank rune in your inventory.',
32
- magicWords: 'iquar ansr ki',
33
- manaCost: 5,
34
- minMagicLevelRequired: 3,
35
- },
36
- {
37
- key: SpellsBlueprint.BoltCreationSpell,
38
- name: 'Bolt Creation Spell',
39
- description: 'A spell that creates bolt in your inventory.',
40
- magicWords: 'iquar lyn',
41
- manaCost: 15,
42
- minMagicLevelRequired: 3,
43
- },
44
- {
45
- key: SpellsBlueprint.SelfHasteSpell,
46
- name: 'Self Haste Spell',
47
- description: 'A self haste spell.',
48
- magicWords: 'talas hiz',
49
- manaCost: 40,
50
- minMagicLevelRequired: 5,
51
- },
52
- {
53
- key: SpellsBlueprint.SelfHealingSpell,
54
- name: 'Self Healing Spell',
55
- description: 'A self healing spell.',
56
- magicWords: 'talas faenya',
57
- manaCost: 10,
58
- minMagicLevelRequired: 1,
59
- },
60
- ];
1
+ import { IRawSpell } from '@rpg-engine/shared';
2
+
3
+ enum SpellsBlueprint {
4
+ SelfHealingSpell = 'self-healing-spell',
5
+ FoodCreationSpell = 'food-creation-spell',
6
+ ArrowCreationSpell = 'arrow-creation-spell',
7
+ BoltCreationSpell = 'bolt-creation-spell',
8
+ BlankRuneCreationSpell = 'blank-rune-creation-spell',
9
+ SelfHasteSpell = 'self-haste-spell',
10
+ FireRuneCreationSpell = 'fire-rune-creation-spell',
11
+ HealRuneCreationSpell = 'healing-rune-creation-spell',
12
+ PoisonRuneCreationSpell = 'poison-rune-creation-spell',
13
+ DarkRuneCreationSpell = 'dark-rune-creation-spell',
14
+ GreaterHealingSpell = 'greater-healing-spell',
15
+ EnergyBoltCreationSpell = 'energy-bolt-creation-spell',
16
+ FireBoltCreationSpell = 'fire-bolt-creation-spell',
17
+ }
18
+
19
+ export const mockSpells: IRawSpell[] = [
20
+ {
21
+ key: SpellsBlueprint.ArrowCreationSpell,
22
+ name: 'Arrow Creation Spell',
23
+ description: 'A spell that creates arrow in your inventory.',
24
+ magicWords: 'iquar elandi',
25
+ manaCost: 10,
26
+ minMagicLevelRequired: 3,
27
+ },
28
+ {
29
+ key: SpellsBlueprint.BlankRuneCreationSpell,
30
+ name: 'Blank Rune Creation Spell',
31
+ description: 'A spell that creates a blank rune in your inventory.',
32
+ magicWords: 'iquar ansr ki',
33
+ manaCost: 5,
34
+ minMagicLevelRequired: 3,
35
+ },
36
+ {
37
+ key: SpellsBlueprint.BoltCreationSpell,
38
+ name: 'Bolt Creation Spell',
39
+ description: 'A spell that creates bolt in your inventory.',
40
+ magicWords: 'iquar lyn',
41
+ manaCost: 15,
42
+ minMagicLevelRequired: 3,
43
+ },
44
+ {
45
+ key: SpellsBlueprint.SelfHasteSpell,
46
+ name: 'Self Haste Spell',
47
+ description: 'A self haste spell.',
48
+ magicWords: 'talas hiz',
49
+ manaCost: 40,
50
+ minMagicLevelRequired: 5,
51
+ },
52
+ {
53
+ key: SpellsBlueprint.SelfHealingSpell,
54
+ name: 'Self Healing Spell',
55
+ description: 'A self healing spell.',
56
+ magicWords: 'talas faenya',
57
+ manaCost: 10,
58
+ minMagicLevelRequired: 1,
59
+ },
60
+ ];
@@ -1,103 +1,103 @@
1
- import React, { useEffect, useState } from 'react';
2
- import Draggable from 'react-draggable';
3
- import styled from 'styled-components';
4
- import { uiFonts } from '../../constants/uiFonts';
5
- import SelectArrow from '../Arrow/SelectArrow';
6
- import Book from './img/0.png';
7
-
8
- export interface IStaticBookProps {
9
- content: string;
10
- onChange?: (slice: string) => void;
11
- onClose?: () => void;
12
- }
13
-
14
- export const StaticBook: React.FC<IStaticBookProps> = ({
15
- content,
16
- onChange,
17
- onClose,
18
- }) => {
19
- const [currentIndex, setCurrentIndex] = useState(0);
20
-
21
- // create slicedContent with string sliced every 550 characters
22
- const slicedContent = content.match(/.{1,550}/g) || [];
23
-
24
- useEffect(() => {
25
- if (onChange) onChange(slicedContent[currentIndex]);
26
- }, [currentIndex]);
27
-
28
- const bookLength = slicedContent.length - 1;
29
-
30
- const onLeftClick = () => {
31
- if (currentIndex === 0) setCurrentIndex(bookLength);
32
- else setCurrentIndex(index => index - 1);
33
- };
34
- const onRightClick = () => {
35
- if (currentIndex === bookLength) setCurrentIndex(0);
36
- else setCurrentIndex(index => index + 1);
37
- };
38
-
39
- const getCurrentContentSlice = () => {
40
- return slicedContent[currentIndex];
41
- };
42
-
43
- return (
44
- <Draggable>
45
- <Container>
46
- <CloseButton onPointerDown={onClose}>X</CloseButton>
47
- <ColumnBook isLastPage={currentIndex === bookLength}>
48
- {getCurrentContentSlice()}
49
- </ColumnBook>
50
-
51
- <ArrowContainer>
52
- {currentIndex >= 1 && (
53
- <SelectArrow
54
- direction="left"
55
- onPointerDown={onLeftClick}
56
- ></SelectArrow>
57
- )}
58
- {currentIndex !== bookLength && (
59
- <SelectArrow
60
- direction="right"
61
- onPointerDown={onRightClick}
62
- ></SelectArrow>
63
- )}
64
- </ArrowContainer>
65
- </Container>
66
- </Draggable>
67
- );
68
- };
69
-
70
- const Container = styled.div`
71
- background-image: url(${Book});
72
- background-repeat: no-repeat;
73
- position: relative;
74
- width: 778px;
75
- height: 463px;
76
- background-position-y: -1rem;
77
- `;
78
-
79
- const CloseButton = styled.p`
80
- position: absolute;
81
- top: 1.9rem;
82
- right: 5rem;
83
- font-size: ${uiFonts.size.large} !important;
84
- `;
85
-
86
- interface IColumnBook {
87
- isLastPage: boolean;
88
- }
89
-
90
- const ColumnBook = styled.span<IColumnBook>`
91
- position: absolute;
92
- left: 5.2rem;
93
- top: 3.8rem;
94
- width: ${({ isLastPage }) => (!isLastPage ? '77%' : '37%')};
95
- column-count: ${({ isLastPage }) => (isLastPage ? 1 : 2)};
96
- grid-gap: 56px;
97
- min-height: 340px;
98
- `;
99
- const ArrowContainer = styled.span`
100
- display: flex;
101
- height: 100%;
102
- align-items: center;
103
- `;
1
+ import React, { useEffect, useState } from 'react';
2
+ import Draggable from 'react-draggable';
3
+ import styled from 'styled-components';
4
+ import { uiFonts } from '../../constants/uiFonts';
5
+ import SelectArrow from '../Arrow/SelectArrow';
6
+ import Book from './img/0.png';
7
+
8
+ export interface IStaticBookProps {
9
+ content: string;
10
+ onChange?: (slice: string) => void;
11
+ onClose?: () => void;
12
+ }
13
+
14
+ export const StaticBook: React.FC<IStaticBookProps> = ({
15
+ content,
16
+ onChange,
17
+ onClose,
18
+ }) => {
19
+ const [currentIndex, setCurrentIndex] = useState(0);
20
+
21
+ // create slicedContent with string sliced every 550 characters
22
+ const slicedContent = content.match(/.{1,550}/g) || [];
23
+
24
+ useEffect(() => {
25
+ if (onChange) onChange(slicedContent[currentIndex]);
26
+ }, [currentIndex]);
27
+
28
+ const bookLength = slicedContent.length - 1;
29
+
30
+ const onLeftClick = () => {
31
+ if (currentIndex === 0) setCurrentIndex(bookLength);
32
+ else setCurrentIndex(index => index - 1);
33
+ };
34
+ const onRightClick = () => {
35
+ if (currentIndex === bookLength) setCurrentIndex(0);
36
+ else setCurrentIndex(index => index + 1);
37
+ };
38
+
39
+ const getCurrentContentSlice = () => {
40
+ return slicedContent[currentIndex];
41
+ };
42
+
43
+ return (
44
+ <Draggable>
45
+ <Container>
46
+ <CloseButton onPointerDown={onClose}>X</CloseButton>
47
+ <ColumnBook isLastPage={currentIndex === bookLength}>
48
+ {getCurrentContentSlice()}
49
+ </ColumnBook>
50
+
51
+ <ArrowContainer>
52
+ {currentIndex >= 1 && (
53
+ <SelectArrow
54
+ direction="left"
55
+ onPointerDown={onLeftClick}
56
+ ></SelectArrow>
57
+ )}
58
+ {currentIndex !== bookLength && (
59
+ <SelectArrow
60
+ direction="right"
61
+ onPointerDown={onRightClick}
62
+ ></SelectArrow>
63
+ )}
64
+ </ArrowContainer>
65
+ </Container>
66
+ </Draggable>
67
+ );
68
+ };
69
+
70
+ const Container = styled.div`
71
+ background-image: url(${Book});
72
+ background-repeat: no-repeat;
73
+ position: relative;
74
+ width: 778px;
75
+ height: 463px;
76
+ background-position-y: -1rem;
77
+ `;
78
+
79
+ const CloseButton = styled.p`
80
+ position: absolute;
81
+ top: 1.9rem;
82
+ right: 5rem;
83
+ font-size: ${uiFonts.size.large} !important;
84
+ `;
85
+
86
+ interface IColumnBook {
87
+ isLastPage: boolean;
88
+ }
89
+
90
+ const ColumnBook = styled.span<IColumnBook>`
91
+ position: absolute;
92
+ left: 5.2rem;
93
+ top: 3.8rem;
94
+ width: ${({ isLastPage }) => (!isLastPage ? '77%' : '37%')};
95
+ column-count: ${({ isLastPage }) => (isLastPage ? 1 : 2)};
96
+ grid-gap: 56px;
97
+ min-height: 340px;
98
+ `;
99
+ const ArrowContainer = styled.span`
100
+ display: flex;
101
+ height: 100%;
102
+ align-items: center;
103
+ `;
@@ -1,11 +1,11 @@
1
- import React from 'react';
2
-
3
- export interface ITextArea
4
- extends React.DetailedHTMLProps<
5
- React.TextareaHTMLAttributes<HTMLTextAreaElement>,
6
- HTMLTextAreaElement
7
- > {}
8
-
9
- export const TextArea: React.FC<ITextArea> = ({ ...props }) => {
10
- return <textarea {...props} />;
11
- };
1
+ import React from 'react';
2
+
3
+ export interface ITextArea
4
+ extends React.DetailedHTMLProps<
5
+ React.TextareaHTMLAttributes<HTMLTextAreaElement>,
6
+ HTMLTextAreaElement
7
+ > {}
8
+
9
+ export const TextArea: React.FC<ITextArea> = ({ ...props }) => {
10
+ return <textarea {...props} />;
11
+ };