@rpg-engine/long-bow 0.3.73 → 0.3.76

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 (160) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +181 -181
  3. package/dist/components/CraftBook/CraftBook.d.ts +3 -1
  4. package/dist/components/Item/Cards/ItemInfo.d.ts +10 -0
  5. package/dist/components/Item/Cards/ItemInfoDisplay.d.ts +10 -0
  6. package/dist/components/Item/Cards/ItemInfoWrapper.d.ts +12 -0
  7. package/dist/components/Item/Cards/ItemTooltip.d.ts +7 -4
  8. package/dist/components/Item/Cards/MobileItemTooltip.d.ts +18 -0
  9. package/dist/components/Item/Inventory/ItemContainer.d.ts +2 -1
  10. package/dist/components/Item/Inventory/ItemSlot.d.ts +4 -1
  11. package/dist/components/TradingMenu/TradingItemRow.d.ts +3 -1
  12. package/dist/components/TradingMenu/TradingMenu.d.ts +6 -4
  13. package/dist/components/shared/SpriteFromAtlas.d.ts +1 -0
  14. package/dist/long-bow.cjs.development.js +1400 -1009
  15. package/dist/long-bow.cjs.development.js.map +1 -1
  16. package/dist/long-bow.cjs.production.min.js +1 -1
  17. package/dist/long-bow.cjs.production.min.js.map +1 -1
  18. package/dist/long-bow.esm.js +1402 -1013
  19. package/dist/long-bow.esm.js.map +1 -1
  20. package/dist/stories/ItemInfoDisplay.stories.d.ts +8 -0
  21. package/dist/stories/TradingMenu.stories.d.ts +2 -2
  22. package/package.json +100 -100
  23. package/src/components/Abstractions/SlotsContainer.tsx +45 -45
  24. package/src/components/Arrow/SelectArrow.tsx +69 -69
  25. package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
  26. package/src/components/Arrow/img/arrow01-left.png +0 -0
  27. package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
  28. package/src/components/Arrow/img/arrow01-right.png +0 -0
  29. package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
  30. package/src/components/Arrow/img/arrow02-left.png +0 -0
  31. package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
  32. package/src/components/Arrow/img/arrow02-right.png +0 -0
  33. package/src/components/Button.tsx +40 -40
  34. package/src/components/Character/CharacterSelection.tsx +96 -96
  35. package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
  36. package/src/components/Chat/Chat.tsx +195 -195
  37. package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
  38. package/src/components/CheckButton.tsx +65 -65
  39. package/src/components/CircularController/CircularController.tsx +248 -248
  40. package/src/components/CraftBook/CraftBook.tsx +240 -227
  41. package/src/components/CraftBook/MockItems.ts +246 -251
  42. package/src/components/DraggableContainer.tsx +153 -153
  43. package/src/components/Dropdown.tsx +90 -90
  44. package/src/components/DropdownSelectorContainer.tsx +42 -42
  45. package/src/components/Equipment/EquipmentSet.tsx +190 -190
  46. package/src/components/HistoryDialog.tsx +104 -104
  47. package/src/components/Input.tsx +15 -15
  48. package/src/components/Item/Cards/ItemInfo.tsx +248 -0
  49. package/src/components/Item/Cards/ItemInfoDisplay.tsx +123 -0
  50. package/src/components/Item/Cards/ItemInfoWrapper.tsx +62 -0
  51. package/src/components/Item/Cards/ItemTooltip.tsx +85 -33
  52. package/src/components/Item/Cards/MobileItemTooltip.tsx +105 -0
  53. package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
  54. package/src/components/Item/Inventory/ItemContainer.tsx +214 -210
  55. package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
  56. package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
  57. package/src/components/Item/Inventory/ItemSlot.tsx +540 -501
  58. package/src/components/Item/Inventory/itemContainerHelper.ts +156 -156
  59. package/src/components/ListMenu.tsx +63 -63
  60. package/src/components/Multitab/Tab.tsx +66 -66
  61. package/src/components/Multitab/TabBody.tsx +13 -13
  62. package/src/components/Multitab/TabsContainer.tsx +97 -97
  63. package/src/components/NPCDialog/NPCDialog.tsx +121 -121
  64. package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
  65. package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
  66. package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
  67. package/src/components/ProgressBar.tsx +92 -92
  68. package/src/components/PropertySelect/PropertySelect.tsx +106 -106
  69. package/src/components/QuestInfo/QuestInfo.tsx +230 -230
  70. package/src/components/QuestList.tsx +129 -129
  71. package/src/components/RPGUIContainer.tsx +47 -47
  72. package/src/components/RPGUIForceRenderStart.tsx +45 -45
  73. package/src/components/RPGUIRoot.tsx +14 -14
  74. package/src/components/RadioButton.tsx +53 -53
  75. package/src/components/RadioInput/RadioButton.tsx +96 -96
  76. package/src/components/RadioInput/RadioInput.tsx +102 -102
  77. package/src/components/RadioInput/instruments.ts +15 -15
  78. package/src/components/RangeSlider.tsx +78 -78
  79. package/src/components/RelativeListMenu.tsx +83 -83
  80. package/src/components/ScrollList.tsx +79 -79
  81. package/src/components/Shortcuts/Shortcuts.tsx +151 -151
  82. package/src/components/Shortcuts/ShortcutsSetter.tsx +132 -132
  83. package/src/components/Shortcuts/SingleShortcut.ts +62 -62
  84. package/src/components/SimpleProgressBar.tsx +62 -62
  85. package/src/components/SkillProgressBar.tsx +133 -133
  86. package/src/components/SkillsContainer.tsx +200 -200
  87. package/src/components/Spellbook/Spell.tsx +201 -201
  88. package/src/components/Spellbook/Spellbook.tsx +150 -150
  89. package/src/components/Spellbook/constants.ts +8 -8
  90. package/src/components/Spellbook/mockSpells.ts +60 -60
  91. package/src/components/StaticBook/StaticBook.tsx +103 -103
  92. package/src/components/TextArea.tsx +11 -11
  93. package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
  94. package/src/components/TimeWidget/TimeWidget.tsx +63 -63
  95. package/src/components/TradingMenu/TradingItemRow.tsx +198 -181
  96. package/src/components/TradingMenu/TradingMenu.tsx +215 -203
  97. package/src/components/TradingMenu/items.mock.ts +48 -96
  98. package/src/components/Truncate.tsx +25 -25
  99. package/src/components/itemSelector/ItemSelector.tsx +136 -136
  100. package/src/components/shared/Column.tsx +16 -16
  101. package/src/components/shared/Ellipsis.tsx +65 -65
  102. package/src/components/shared/SpriteFromAtlas.tsx +104 -102
  103. package/src/components/typography/DynamicText.tsx +49 -49
  104. package/src/constants/uiColors.ts +20 -20
  105. package/src/constants/uiDevices.ts +3 -3
  106. package/src/constants/uiFonts.ts +12 -12
  107. package/src/hooks/useEventListener.ts +21 -21
  108. package/src/hooks/useOutsideAlerter.ts +25 -25
  109. package/src/index.tsx +40 -40
  110. package/src/libs/StringHelpers.ts +3 -3
  111. package/src/mocks/atlas/entities/entities.json +20215 -20215
  112. package/src/mocks/atlas/icons/icons.json +735 -735
  113. package/src/mocks/atlas/items/items.json +12086 -12086
  114. package/src/mocks/equipmentSet.mocks.ts +391 -393
  115. package/src/mocks/itemContainer.mocks.ts +563 -562
  116. package/src/mocks/skills.mocks.ts +128 -128
  117. package/src/stories/Arrow.stories.tsx +26 -26
  118. package/src/stories/Button.stories.tsx +36 -36
  119. package/src/stories/CharacterSelection.stories.tsx +45 -45
  120. package/src/stories/CharacterStatus.stories.tsx +29 -29
  121. package/src/stories/Chat.stories.tsx +187 -187
  122. package/src/stories/ChatDeprecated.stories.tsx +170 -170
  123. package/src/stories/CheckButton.stories.tsx +48 -48
  124. package/src/stories/CircullarController.stories.tsx +37 -37
  125. package/src/stories/CraftBook.stories.tsx +42 -40
  126. package/src/stories/DayNightPeriod.stories.tsx +27 -27
  127. package/src/stories/DraggableContainer.stories.tsx +28 -28
  128. package/src/stories/Dropdown.stories.tsx +46 -46
  129. package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
  130. package/src/stories/EquipmentSet.stories.tsx +65 -65
  131. package/src/stories/HistoryDialog.stories.tsx +61 -61
  132. package/src/stories/ItemContainer.stories.tsx +200 -198
  133. package/src/stories/ItemInfoDisplay.stories.tsx +33 -0
  134. package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
  135. package/src/stories/ItemSelector.stories.tsx +77 -77
  136. package/src/stories/ItemTradingComponent.stories.tsx +35 -35
  137. package/src/stories/ListMenu.stories.tsx +56 -56
  138. package/src/stories/Multitab.stories.tsx +51 -51
  139. package/src/stories/NPCDialog.stories.tsx +130 -130
  140. package/src/stories/NPCMultiDialog.stories.tsx +71 -71
  141. package/src/stories/ProgressBar.stories.tsx +23 -23
  142. package/src/stories/PropertySelect.stories.tsx +40 -40
  143. package/src/stories/QuestInfo.stories.tsx +107 -107
  144. package/src/stories/QuestList.stories.tsx +82 -82
  145. package/src/stories/RPGUIContainers.stories.tsx +42 -42
  146. package/src/stories/RadioButton.stories.tsx +49 -49
  147. package/src/stories/RadioInput.stories.tsx +34 -34
  148. package/src/stories/RangeSlider.stories.tsx +64 -64
  149. package/src/stories/ScrollList.stories.tsx +85 -85
  150. package/src/stories/Shortcuts.stories.tsx +39 -39
  151. package/src/stories/SimpleProgressBar.stories.tsx +22 -22
  152. package/src/stories/SkillProgressBar.stories.tsx +34 -34
  153. package/src/stories/SkillsContainer.stories.tsx +35 -35
  154. package/src/stories/Spellbook.stories.tsx +104 -104
  155. package/src/stories/StaticBook.stories.tsx +32 -32
  156. package/src/stories/Text.stories.tsx +42 -42
  157. package/src/stories/TimeWidget.stories.tsx +27 -27
  158. package/src/stories/TradingMenu.stories.tsx +47 -45
  159. package/src/types/eventTypes.ts +4 -4
  160. package/src/types/index.d.ts +2 -2
@@ -1,132 +1,132 @@
1
- import {
2
- getItemTextureKeyPath,
3
- IItem,
4
- IRawSpell,
5
- IShortcut,
6
- ShortcutType,
7
- } from '@rpg-engine/shared';
8
- import React from 'react';
9
- import styled from 'styled-components';
10
- import { uiColors } from '../../constants/uiColors';
11
- import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
12
-
13
- type ShortcutsSetterProps = {
14
- setSettingShortcutIndex: (index: number) => void;
15
- settingShortcutIndex: number;
16
- shortcuts: IShortcut[];
17
- removeShortcut: (index: number) => void;
18
- atlasJSON: any;
19
- atlasIMG: any;
20
- };
21
-
22
- export const ShortcutsSetter: React.FC<ShortcutsSetterProps> = ({
23
- setSettingShortcutIndex,
24
- settingShortcutIndex,
25
- shortcuts,
26
- removeShortcut,
27
- atlasJSON,
28
- atlasIMG,
29
- }) => {
30
- const getContent = (index: number) => {
31
- if (shortcuts[index]?.type === ShortcutType.Item) {
32
- const payload = shortcuts[index]?.payload as IItem | undefined;
33
-
34
- if (!payload) return null;
35
-
36
- return (
37
- <SpriteFromAtlas
38
- atlasIMG={atlasIMG}
39
- atlasJSON={atlasJSON}
40
- spriteKey={getItemTextureKeyPath(
41
- {
42
- key: payload.texturePath,
43
- texturePath: payload.texturePath,
44
- stackQty: payload.stackQty || 1,
45
- },
46
- atlasJSON
47
- )}
48
- width={32}
49
- height={32}
50
- imgScale={1.6}
51
- imgStyle={{ left: '5px' }}
52
- />
53
- );
54
- }
55
-
56
- const payload = shortcuts[index]?.payload as IRawSpell | undefined;
57
-
58
- return <span>{payload?.magicWords.split(' ').map(word => word[0])}</span>;
59
- };
60
-
61
- return (
62
- <Container>
63
- <p>Shortcuts:</p>
64
- <List id="shortcuts_list">
65
- {Array.from({ length: 6 }).map((_, i) => (
66
- <Shortcut
67
- key={i}
68
- onPointerDown={() => {
69
- removeShortcut(i);
70
- if (!shortcuts[i] || shortcuts[i].type === ShortcutType.None)
71
- setSettingShortcutIndex(i);
72
- }}
73
- disabled={settingShortcutIndex !== -1 && settingShortcutIndex !== i}
74
- isBeingSet={settingShortcutIndex === i}
75
- >
76
- {getContent(i)}
77
- </Shortcut>
78
- ))}
79
- </List>
80
- </Container>
81
- );
82
- };
83
-
84
- const Container = styled.div`
85
- p {
86
- margin: 0;
87
- margin-left: 0.5rem;
88
- }
89
- `;
90
-
91
- const Shortcut = styled.button<{ isBeingSet?: boolean }>`
92
- width: 2.6rem;
93
- height: 2.6rem;
94
- background-color: ${uiColors.lightGray};
95
- border: 2px solid
96
- ${({ isBeingSet }) => (isBeingSet ? uiColors.yellow : uiColors.darkGray)};
97
- border-radius: 50%;
98
- text-transform: uppercase;
99
- font-size: 0.7rem;
100
- font-weight: bold;
101
- display: flex;
102
- align-items: center;
103
- justify-content: center;
104
-
105
- span {
106
- margin-top: 4px;
107
- }
108
-
109
- &:hover,
110
- &:focus {
111
- background-color: ${uiColors.darkGray};
112
- }
113
-
114
- &:active {
115
- background-color: ${uiColors.gray};
116
- }
117
-
118
- &:disabled {
119
- opacity: 0.5;
120
- }
121
- `;
122
-
123
- const List = styled.div`
124
- width: 100%;
125
- display: flex;
126
- align-items: center;
127
- gap: 0.5rem;
128
- padding-bottom: 0.5rem;
129
- padding-left: 0.5rem;
130
- box-sizing: border-box;
131
- margin: 0 !important;
132
- `;
1
+ import {
2
+ getItemTextureKeyPath,
3
+ IItem,
4
+ IRawSpell,
5
+ IShortcut,
6
+ ShortcutType,
7
+ } from '@rpg-engine/shared';
8
+ import React from 'react';
9
+ import styled from 'styled-components';
10
+ import { uiColors } from '../../constants/uiColors';
11
+ import { SpriteFromAtlas } from '../shared/SpriteFromAtlas';
12
+
13
+ type ShortcutsSetterProps = {
14
+ setSettingShortcutIndex: (index: number) => void;
15
+ settingShortcutIndex: number;
16
+ shortcuts: IShortcut[];
17
+ removeShortcut: (index: number) => void;
18
+ atlasJSON: any;
19
+ atlasIMG: any;
20
+ };
21
+
22
+ export const ShortcutsSetter: React.FC<ShortcutsSetterProps> = ({
23
+ setSettingShortcutIndex,
24
+ settingShortcutIndex,
25
+ shortcuts,
26
+ removeShortcut,
27
+ atlasJSON,
28
+ atlasIMG,
29
+ }) => {
30
+ const getContent = (index: number) => {
31
+ if (shortcuts[index]?.type === ShortcutType.Item) {
32
+ const payload = shortcuts[index]?.payload as IItem | undefined;
33
+
34
+ if (!payload) return null;
35
+
36
+ return (
37
+ <SpriteFromAtlas
38
+ atlasIMG={atlasIMG}
39
+ atlasJSON={atlasJSON}
40
+ spriteKey={getItemTextureKeyPath(
41
+ {
42
+ key: payload.texturePath,
43
+ texturePath: payload.texturePath,
44
+ stackQty: payload.stackQty || 1,
45
+ },
46
+ atlasJSON
47
+ )}
48
+ width={32}
49
+ height={32}
50
+ imgScale={1.6}
51
+ imgStyle={{ left: '5px' }}
52
+ />
53
+ );
54
+ }
55
+
56
+ const payload = shortcuts[index]?.payload as IRawSpell | undefined;
57
+
58
+ return <span>{payload?.magicWords.split(' ').map(word => word[0])}</span>;
59
+ };
60
+
61
+ return (
62
+ <Container>
63
+ <p>Shortcuts:</p>
64
+ <List id="shortcuts_list">
65
+ {Array.from({ length: 6 }).map((_, i) => (
66
+ <Shortcut
67
+ key={i}
68
+ onPointerDown={() => {
69
+ removeShortcut(i);
70
+ if (!shortcuts[i] || shortcuts[i].type === ShortcutType.None)
71
+ setSettingShortcutIndex(i);
72
+ }}
73
+ disabled={settingShortcutIndex !== -1 && settingShortcutIndex !== i}
74
+ isBeingSet={settingShortcutIndex === i}
75
+ >
76
+ {getContent(i)}
77
+ </Shortcut>
78
+ ))}
79
+ </List>
80
+ </Container>
81
+ );
82
+ };
83
+
84
+ const Container = styled.div`
85
+ p {
86
+ margin: 0;
87
+ margin-left: 0.5rem;
88
+ }
89
+ `;
90
+
91
+ const Shortcut = styled.button<{ isBeingSet?: boolean }>`
92
+ width: 2.6rem;
93
+ height: 2.6rem;
94
+ background-color: ${uiColors.lightGray};
95
+ border: 2px solid
96
+ ${({ isBeingSet }) => (isBeingSet ? uiColors.yellow : uiColors.darkGray)};
97
+ border-radius: 50%;
98
+ text-transform: uppercase;
99
+ font-size: 0.7rem;
100
+ font-weight: bold;
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+
105
+ span {
106
+ margin-top: 4px;
107
+ }
108
+
109
+ &:hover,
110
+ &:focus {
111
+ background-color: ${uiColors.darkGray};
112
+ }
113
+
114
+ &:active {
115
+ background-color: ${uiColors.gray};
116
+ }
117
+
118
+ &:disabled {
119
+ opacity: 0.5;
120
+ }
121
+ `;
122
+
123
+ const List = styled.div`
124
+ width: 100%;
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.5rem;
128
+ padding-bottom: 0.5rem;
129
+ padding-left: 0.5rem;
130
+ box-sizing: border-box;
131
+ margin: 0 !important;
132
+ `;
@@ -1,62 +1,62 @@
1
- import styled from 'styled-components';
2
- import { uiColors } from '../../constants/uiColors';
3
-
4
- export const SingleShortcut = styled.button`
5
- width: 3rem;
6
- height: 3rem;
7
- background-color: ${uiColors.lightGray};
8
- border: 2px solid ${uiColors.darkGray};
9
- border-radius: 50%;
10
- text-transform: uppercase;
11
- font-size: 0.7rem;
12
- font-weight: bold;
13
- display: flex;
14
- align-items: center;
15
- justify-content: center;
16
- position: relative;
17
-
18
- span {
19
- pointer-events: none;
20
- }
21
-
22
- .mana {
23
- position: absolute;
24
- top: -5px;
25
- right: 0;
26
- font-size: 0.65rem;
27
- color: ${uiColors.blue};
28
- }
29
-
30
- .qty {
31
- position: absolute;
32
- top: -5px;
33
- right: 0;
34
- font-size: 0.65rem;
35
- }
36
-
37
- .magicWords {
38
- margin-top: 4px;
39
- }
40
-
41
- .keyboard {
42
- position: absolute;
43
- bottom: -5px;
44
- left: 0;
45
- font-size: 0.65rem;
46
- color: ${uiColors.yellow};
47
- }
48
-
49
- &:hover,
50
- &:focus {
51
- background-color: ${uiColors.darkGray};
52
- }
53
-
54
- &:active {
55
- background-color: ${uiColors.gray};
56
- border-color: ${uiColors.yellow};
57
- }
58
-
59
- &:disabled {
60
- opacity: 0.5;
61
- }
62
- `;
1
+ import styled from 'styled-components';
2
+ import { uiColors } from '../../constants/uiColors';
3
+
4
+ export const SingleShortcut = styled.button`
5
+ width: 3rem;
6
+ height: 3rem;
7
+ background-color: ${uiColors.lightGray};
8
+ border: 2px solid ${uiColors.darkGray};
9
+ border-radius: 50%;
10
+ text-transform: uppercase;
11
+ font-size: 0.7rem;
12
+ font-weight: bold;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ position: relative;
17
+
18
+ span {
19
+ pointer-events: none;
20
+ }
21
+
22
+ .mana {
23
+ position: absolute;
24
+ top: -5px;
25
+ right: 0;
26
+ font-size: 0.65rem;
27
+ color: ${uiColors.blue};
28
+ }
29
+
30
+ .qty {
31
+ position: absolute;
32
+ top: -5px;
33
+ right: 0;
34
+ font-size: 0.65rem;
35
+ }
36
+
37
+ .magicWords {
38
+ margin-top: 4px;
39
+ }
40
+
41
+ .keyboard {
42
+ position: absolute;
43
+ bottom: -5px;
44
+ left: 0;
45
+ font-size: 0.65rem;
46
+ color: ${uiColors.yellow};
47
+ }
48
+
49
+ &:hover,
50
+ &:focus {
51
+ background-color: ${uiColors.darkGray};
52
+ }
53
+
54
+ &:active {
55
+ background-color: ${uiColors.gray};
56
+ border-color: ${uiColors.yellow};
57
+ }
58
+
59
+ &:disabled {
60
+ opacity: 0.5;
61
+ }
62
+ `;
@@ -1,62 +1,62 @@
1
- import React from 'react';
2
- import styled from 'styled-components';
3
-
4
- export interface ISimpleProgressBarProps {
5
- value: number;
6
- bgColor?: string;
7
- margin?: number;
8
- }
9
-
10
- export const SimpleProgressBar: React.FC<ISimpleProgressBarProps> = ({
11
- value,
12
- bgColor = 'red',
13
- margin = 20,
14
- }) => {
15
- return (
16
- <Container className="simple-progress-bar">
17
- <ProgressBarContainer margin={margin}>
18
- <BackgroundBar>
19
- <Progress value={value} bgColor={bgColor} />
20
- </BackgroundBar>
21
- </ProgressBarContainer>
22
- </Container>
23
- );
24
- };
25
-
26
- const Container = styled.div`
27
- display: flex;
28
- justify-content: center;
29
- align-items: center;
30
- width: 100%;
31
- `;
32
-
33
- const BackgroundBar = styled.span`
34
- background-color: rgba(0, 0, 0, 0.075);
35
- `;
36
-
37
- interface ISimpleProgressBarThemeProps {
38
- value: number;
39
- bgColor: string;
40
- }
41
-
42
- const Progress = styled.span`
43
- background-color: ${(props: ISimpleProgressBarThemeProps) => props.bgColor};
44
- width: ${(props: ISimpleProgressBarThemeProps) => props.value}%;
45
- `;
46
-
47
- interface ISimpleProgressBarTheme2Props {
48
- margin: number;
49
- }
50
-
51
- const ProgressBarContainer = styled.div`
52
- border-radius: 60px;
53
- border: 1px solid #282424;
54
- overflow: hidden;
55
- width: 100%;
56
- span {
57
- display: block;
58
- height: 100%;
59
- }
60
- height: 8px;
61
- margin-left: ${(props: ISimpleProgressBarTheme2Props) => props.margin}px;
62
- `;
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ export interface ISimpleProgressBarProps {
5
+ value: number;
6
+ bgColor?: string;
7
+ margin?: number;
8
+ }
9
+
10
+ export const SimpleProgressBar: React.FC<ISimpleProgressBarProps> = ({
11
+ value,
12
+ bgColor = 'red',
13
+ margin = 20,
14
+ }) => {
15
+ return (
16
+ <Container className="simple-progress-bar">
17
+ <ProgressBarContainer margin={margin}>
18
+ <BackgroundBar>
19
+ <Progress value={value} bgColor={bgColor} />
20
+ </BackgroundBar>
21
+ </ProgressBarContainer>
22
+ </Container>
23
+ );
24
+ };
25
+
26
+ const Container = styled.div`
27
+ display: flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ width: 100%;
31
+ `;
32
+
33
+ const BackgroundBar = styled.span`
34
+ background-color: rgba(0, 0, 0, 0.075);
35
+ `;
36
+
37
+ interface ISimpleProgressBarThemeProps {
38
+ value: number;
39
+ bgColor: string;
40
+ }
41
+
42
+ const Progress = styled.span`
43
+ background-color: ${(props: ISimpleProgressBarThemeProps) => props.bgColor};
44
+ width: ${(props: ISimpleProgressBarThemeProps) => props.value}%;
45
+ `;
46
+
47
+ interface ISimpleProgressBarTheme2Props {
48
+ margin: number;
49
+ }
50
+
51
+ const ProgressBarContainer = styled.div`
52
+ border-radius: 60px;
53
+ border: 1px solid #282424;
54
+ overflow: hidden;
55
+ width: 100%;
56
+ span {
57
+ display: block;
58
+ height: 100%;
59
+ }
60
+ height: 8px;
61
+ margin-left: ${(props: ISimpleProgressBarTheme2Props) => props.margin}px;
62
+ `;