tgui-core 1.0.2 → 1.0.3

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/{src/components → components}/AnimatedNumber.tsx +185 -185
  2. package/{src/components → components}/BlockQuote.tsx +15 -15
  3. package/{src/components → components}/BodyZoneSelector.tsx +149 -149
  4. package/{src/components → components}/Box.tsx +255 -255
  5. package/{src/components → components}/Button.tsx +415 -415
  6. package/{src/components → components}/ByondUi.jsx +121 -121
  7. package/{src/components → components}/Chart.tsx +160 -160
  8. package/{src/components → components}/ColorBox.tsx +30 -30
  9. package/{src/components → components}/Dimmer.tsx +19 -19
  10. package/{src/components → components}/Divider.tsx +26 -26
  11. package/{src/components → components}/DmIcon.tsx +72 -72
  12. package/{src/components → components}/DraggableControl.jsx +282 -282
  13. package/{src/components → components}/Dropdown.tsx +246 -246
  14. package/{src/components → components}/Flex.tsx +105 -105
  15. package/{src/components → components}/Icon.tsx +91 -91
  16. package/{src/components → components}/Input.tsx +181 -181
  17. package/{src/components → components}/KeyListener.tsx +40 -40
  18. package/{src/components → components}/Knob.tsx +185 -185
  19. package/{src/components → components}/LabeledList.tsx +130 -130
  20. package/{src/components → components}/MenuBar.tsx +233 -238
  21. package/{src/components → components}/Modal.tsx +25 -25
  22. package/{src/components → components}/NoticeBox.tsx +48 -48
  23. package/{src/components → components}/NumberInput.tsx +328 -328
  24. package/{src/components → components}/ProgressBar.tsx +79 -79
  25. package/{src/components → components}/RestrictedInput.jsx +301 -301
  26. package/{src/components → components}/RoundGauge.tsx +189 -189
  27. package/{src/components → components}/Section.tsx +125 -125
  28. package/{src/components → components}/Slider.tsx +173 -173
  29. package/{src/components → components}/Stack.tsx +101 -101
  30. package/{src/components → components}/Table.tsx +90 -90
  31. package/{src/components → components}/Tabs.tsx +90 -90
  32. package/{src/components → components}/TextArea.tsx +198 -198
  33. package/{src/components → components}/TimeDisplay.jsx +64 -64
  34. package/components/index.ts +51 -0
  35. package/{src/debug/KitchenSink.jsx → debug/KitchenSink.tsx} +56 -56
  36. package/{src/debug/actions.js → debug/actions.ts} +11 -11
  37. package/{src/debug/hooks.js → debug/hooks.ts} +10 -10
  38. package/{src/debug/middleware.js → debug/middleware.ts} +86 -86
  39. package/{src/debug/reducer.js → debug/reducer.ts} +27 -22
  40. package/{src/debug/selectors.js → debug/selectors.ts} +7 -7
  41. package/{src/layouts → layouts}/Layout.tsx +75 -75
  42. package/{src/layouts → layouts}/NtosWindow.tsx +162 -162
  43. package/{src/layouts → layouts}/Pane.tsx +56 -56
  44. package/{src/layouts → layouts}/Window.tsx +227 -227
  45. package/layouts/index.ts +10 -0
  46. package/package.json +3 -2
  47. package/src/assets.ts +43 -43
  48. package/src/backend.ts +369 -369
  49. package/src/drag.ts +280 -280
  50. package/src/events.ts +237 -237
  51. package/src/hotkeys.ts +212 -212
  52. package/src/renderer.ts +50 -50
  53. package/stories/Blink.stories.tsx +20 -0
  54. package/stories/BlockQuote.stories.tsx +23 -0
  55. package/stories/Box.stories.tsx +27 -0
  56. package/stories/Button.stories.tsx +68 -0
  57. package/stories/ByondUi.stories.tsx +45 -0
  58. package/stories/Collapsible.stories.tsx +23 -0
  59. package/stories/Flex.stories.tsx +68 -0
  60. package/stories/Input.stories.tsx +124 -0
  61. package/stories/LabeledList.stories.tsx +73 -0
  62. package/stories/Popper.stories.tsx +58 -0
  63. package/stories/ProgressBar.stories.tsx +58 -0
  64. package/stories/Stack.stories.tsx +55 -0
  65. package/stories/Storage.stories.tsx +46 -0
  66. package/stories/Themes.stories.tsx +30 -0
  67. package/stories/Tooltip.stories.tsx +48 -0
  68. package/stories/common.tsx +19 -0
  69. package/tsconfig.json +0 -21
  70. package/src/components/Grid.tsx +0 -44
  71. /package/{src/common → common}/collections.ts +0 -0
  72. /package/{src/common → common}/color.ts +0 -0
  73. /package/{src/common → common}/events.ts +0 -0
  74. /package/{src/common → common}/exhaustive.ts +0 -0
  75. /package/{src/common → common}/fp.ts +0 -0
  76. /package/{src/common → common}/keycodes.ts +0 -0
  77. /package/{src/common → common}/keys.ts +0 -0
  78. /package/{src/common → common}/math.ts +0 -0
  79. /package/{src/common → common}/perf.ts +0 -0
  80. /package/{src/common → common}/random.ts +0 -0
  81. /package/{src/common → common}/react.ts +0 -0
  82. /package/{src/common → common}/redux.ts +0 -0
  83. /package/{src/common → common}/storage.js +0 -0
  84. /package/{src/common → common}/string.ts +0 -0
  85. /package/{src/common → common}/timer.ts +0 -0
  86. /package/{src/common → common}/type-utils.ts +0 -0
  87. /package/{src/common → common}/types.ts +0 -0
  88. /package/{src/common → common}/uuid.ts +0 -0
  89. /package/{src/common → common}/vector.ts +0 -0
  90. /package/{src/components → components}/Autofocus.tsx +0 -0
  91. /package/{src/components → components}/Blink.jsx +0 -0
  92. /package/{src/components → components}/Collapsible.tsx +0 -0
  93. /package/{src/components → components}/Dialog.tsx +0 -0
  94. /package/{src/components → components}/FakeTerminal.jsx +0 -0
  95. /package/{src/components → components}/FitText.tsx +0 -0
  96. /package/{src/components → components}/Image.tsx +0 -0
  97. /package/{src/components → components}/InfinitePlane.jsx +0 -0
  98. /package/{src/components → components}/LabeledControls.tsx +0 -0
  99. /package/{src/components → components}/Popper.tsx +0 -0
  100. /package/{src/components → components}/StyleableSection.tsx +0 -0
  101. /package/{src/components → components}/Tooltip.tsx +0 -0
  102. /package/{src/components → components}/TrackOutsideClicks.tsx +0 -0
  103. /package/{src/components → components}/VirtualList.tsx +0 -0
  104. /package/{src/debug → debug}/index.ts +0 -0
  105. /package/{src/styles → styles}/base.scss +0 -0
  106. /package/{src/styles → styles}/colors.scss +0 -0
  107. /package/{src/styles → styles}/components/BlockQuote.scss +0 -0
  108. /package/{src/styles → styles}/components/Button.scss +0 -0
  109. /package/{src/styles → styles}/components/ColorBox.scss +0 -0
  110. /package/{src/styles → styles}/components/Dialog.scss +0 -0
  111. /package/{src/styles → styles}/components/Dimmer.scss +0 -0
  112. /package/{src/styles → styles}/components/Divider.scss +0 -0
  113. /package/{src/styles → styles}/components/Dropdown.scss +0 -0
  114. /package/{src/styles → styles}/components/Flex.scss +0 -0
  115. /package/{src/styles → styles}/components/Icon.scss +0 -0
  116. /package/{src/styles → styles}/components/Input.scss +0 -0
  117. /package/{src/styles → styles}/components/Knob.scss +0 -0
  118. /package/{src/styles → styles}/components/LabeledList.scss +0 -0
  119. /package/{src/styles → styles}/components/MenuBar.scss +0 -0
  120. /package/{src/styles → styles}/components/Modal.scss +0 -0
  121. /package/{src/styles → styles}/components/NoticeBox.scss +0 -0
  122. /package/{src/styles → styles}/components/NumberInput.scss +0 -0
  123. /package/{src/styles → styles}/components/ProgressBar.scss +0 -0
  124. /package/{src/styles → styles}/components/RoundGauge.scss +0 -0
  125. /package/{src/styles → styles}/components/Section.scss +0 -0
  126. /package/{src/styles → styles}/components/Slider.scss +0 -0
  127. /package/{src/styles → styles}/components/Stack.scss +0 -0
  128. /package/{src/styles → styles}/components/Table.scss +0 -0
  129. /package/{src/styles → styles}/components/Tabs.scss +0 -0
  130. /package/{src/styles → styles}/components/TextArea.scss +0 -0
  131. /package/{src/styles → styles}/components/Tooltip.scss +0 -0
  132. /package/{src/styles → styles}/functions.scss +0 -0
  133. /package/{src/styles → styles}/layouts/Layout.scss +0 -0
  134. /package/{src/styles → styles}/layouts/NtosHeader.scss +0 -0
  135. /package/{src/styles → styles}/layouts/NtosWindow.scss +0 -0
  136. /package/{src/styles → styles}/layouts/TitleBar.scss +0 -0
  137. /package/{src/styles → styles}/layouts/Window.scss +0 -0
  138. /package/{src/styles → styles}/main.scss +0 -0
  139. /package/{src/styles → styles}/reset.scss +0 -0
  140. /package/{src/styles → styles}/themes/abductor.scss +0 -0
  141. /package/{src/styles → styles}/themes/admin.scss +0 -0
  142. /package/{src/styles → styles}/themes/cardtable.scss +0 -0
  143. /package/{src/styles → styles}/themes/hackerman.scss +0 -0
  144. /package/{src/styles → styles}/themes/malfunction.scss +0 -0
  145. /package/{src/styles → styles}/themes/neutral.scss +0 -0
  146. /package/{src/styles → styles}/themes/ntOS95.scss +0 -0
  147. /package/{src/styles → styles}/themes/ntos.scss +0 -0
  148. /package/{src/styles → styles}/themes/ntos_cat.scss +0 -0
  149. /package/{src/styles → styles}/themes/ntos_darkmode.scss +0 -0
  150. /package/{src/styles → styles}/themes/ntos_lightmode.scss +0 -0
  151. /package/{src/styles → styles}/themes/ntos_spooky.scss +0 -0
  152. /package/{src/styles → styles}/themes/ntos_synth.scss +0 -0
  153. /package/{src/styles → styles}/themes/ntos_terminal.scss +0 -0
  154. /package/{src/styles → styles}/themes/paper.scss +0 -0
  155. /package/{src/styles → styles}/themes/retro.scss +0 -0
  156. /package/{src/styles → styles}/themes/spookyconsole.scss +0 -0
  157. /package/{src/styles → styles}/themes/syndicate.scss +0 -0
  158. /package/{src/styles → styles}/themes/wizard.scss +0 -0
@@ -1,149 +1,149 @@
1
- import { Component, createRef } from 'react';
2
-
3
- import { resolveAsset } from '../assets';
4
- import { Image } from './Image';
5
-
6
- export enum BodyZone {
7
- Head = 'head',
8
- Chest = 'chest',
9
- LeftArm = 'l_arm',
10
- RightArm = 'r_arm',
11
- LeftLeg = 'l_leg',
12
- RightLeg = 'r_leg',
13
- Eyes = 'eyes',
14
- Mouth = 'mouth',
15
- Groin = 'groin',
16
- }
17
-
18
- const bodyZonePixelToZone = (x: number, y: number): BodyZone | null => {
19
- // TypeScript translation of /atom/movable/screen/zone_sel/proc/get_zone_at
20
- if (y < 1) {
21
- return null;
22
- } else if (y < 10) {
23
- if (x > 10 && x < 15) {
24
- return BodyZone.RightLeg;
25
- } else if (x > 17 && x < 22) {
26
- return BodyZone.LeftLeg;
27
- }
28
- } else if (y < 13) {
29
- if (x > 8 && x < 11) {
30
- return BodyZone.RightArm;
31
- } else if (x > 12 && x < 20) {
32
- return BodyZone.Groin;
33
- } else if (x > 21 && x < 24) {
34
- return BodyZone.LeftArm;
35
- }
36
- } else if (y < 22) {
37
- if (x > 8 && x < 11) {
38
- return BodyZone.RightArm;
39
- } else if (x > 12 && x < 20) {
40
- return BodyZone.Chest;
41
- } else if (x > 21 && x < 24) {
42
- return BodyZone.LeftArm;
43
- }
44
- } else if (y < 30 && x > 12 && x < 20) {
45
- if (y > 23 && y < 24 && x > 15 && x < 17) {
46
- return BodyZone.Mouth;
47
- } else if (y > 25 && y < 27 && x > 14 && x < 18) {
48
- return BodyZone.Eyes;
49
- } else {
50
- return BodyZone.Head;
51
- }
52
- }
53
-
54
- return null;
55
- };
56
-
57
- type BodyZoneSelectorProps = {
58
- onClick?: (zone: BodyZone) => void;
59
- scale?: number;
60
- selectedZone: BodyZone | null;
61
- theme?: string;
62
- };
63
-
64
- type BodyZoneSelectorState = {
65
- hoverZone: BodyZone | null;
66
- };
67
-
68
- export class BodyZoneSelector extends Component<
69
- BodyZoneSelectorProps,
70
- BodyZoneSelectorState
71
- > {
72
- ref = createRef<HTMLDivElement>();
73
- state: BodyZoneSelectorState = {
74
- hoverZone: null,
75
- };
76
-
77
- render() {
78
- const { hoverZone } = this.state;
79
- const { scale = 3, selectedZone, theme = 'midnight' } = this.props;
80
-
81
- return (
82
- <div
83
- ref={this.ref}
84
- style={{
85
- width: `${32 * scale}px`,
86
- height: `${32 * scale}px`,
87
- position: 'relative',
88
- }}
89
- >
90
- <Image
91
- src={resolveAsset(`body_zones.base_${theme}.png`)}
92
- onClick={() => {
93
- const onClick = this.props.onClick;
94
- if (onClick && this.state.hoverZone) {
95
- onClick(this.state.hoverZone);
96
- }
97
- }}
98
- onMouseMove={(event) => {
99
- if (!this.props.onClick) {
100
- return;
101
- }
102
-
103
- const rect = this.ref.current?.getBoundingClientRect();
104
- if (!rect) {
105
- return;
106
- }
107
-
108
- const x = event.clientX - rect.left;
109
- const y = 32 * scale - (event.clientY - rect.top);
110
-
111
- this.setState({
112
- hoverZone: bodyZonePixelToZone(x / scale, y / scale),
113
- });
114
- }}
115
- style={{
116
- position: 'absolute',
117
- width: `${32 * scale}px`,
118
- height: `${32 * scale}px`,
119
- }}
120
- />
121
-
122
- {selectedZone && (
123
- <Image
124
- src={resolveAsset(`body_zones.${selectedZone}.png`)}
125
- style={{
126
- pointerEvents: 'none',
127
- position: 'absolute',
128
- width: `${32 * scale}px`,
129
- height: `${32 * scale}px`,
130
- }}
131
- />
132
- )}
133
-
134
- {hoverZone && hoverZone !== selectedZone && (
135
- <Image
136
- src={resolveAsset(`body_zones.${hoverZone}.png`)}
137
- style={{
138
- opacity: '0.5',
139
- pointerEvents: 'none',
140
- position: 'absolute',
141
- width: `${32 * scale}px`,
142
- height: `${32 * scale}px`,
143
- }}
144
- />
145
- )}
146
- </div>
147
- );
148
- }
149
- }
1
+ import { Component, createRef } from 'react';
2
+
3
+ import { resolveAsset } from '../src/assets';
4
+ import { Image } from './Image';
5
+
6
+ export enum BodyZone {
7
+ Head = 'head',
8
+ Chest = 'chest',
9
+ LeftArm = 'l_arm',
10
+ RightArm = 'r_arm',
11
+ LeftLeg = 'l_leg',
12
+ RightLeg = 'r_leg',
13
+ Eyes = 'eyes',
14
+ Mouth = 'mouth',
15
+ Groin = 'groin',
16
+ }
17
+
18
+ const bodyZonePixelToZone = (x: number, y: number): BodyZone | null => {
19
+ // TypeScript translation of /atom/movable/screen/zone_sel/proc/get_zone_at
20
+ if (y < 1) {
21
+ return null;
22
+ } else if (y < 10) {
23
+ if (x > 10 && x < 15) {
24
+ return BodyZone.RightLeg;
25
+ } else if (x > 17 && x < 22) {
26
+ return BodyZone.LeftLeg;
27
+ }
28
+ } else if (y < 13) {
29
+ if (x > 8 && x < 11) {
30
+ return BodyZone.RightArm;
31
+ } else if (x > 12 && x < 20) {
32
+ return BodyZone.Groin;
33
+ } else if (x > 21 && x < 24) {
34
+ return BodyZone.LeftArm;
35
+ }
36
+ } else if (y < 22) {
37
+ if (x > 8 && x < 11) {
38
+ return BodyZone.RightArm;
39
+ } else if (x > 12 && x < 20) {
40
+ return BodyZone.Chest;
41
+ } else if (x > 21 && x < 24) {
42
+ return BodyZone.LeftArm;
43
+ }
44
+ } else if (y < 30 && x > 12 && x < 20) {
45
+ if (y > 23 && y < 24 && x > 15 && x < 17) {
46
+ return BodyZone.Mouth;
47
+ } else if (y > 25 && y < 27 && x > 14 && x < 18) {
48
+ return BodyZone.Eyes;
49
+ } else {
50
+ return BodyZone.Head;
51
+ }
52
+ }
53
+
54
+ return null;
55
+ };
56
+
57
+ type BodyZoneSelectorProps = {
58
+ onClick?: (zone: BodyZone) => void;
59
+ scale?: number;
60
+ selectedZone: BodyZone | null;
61
+ theme?: string;
62
+ };
63
+
64
+ type BodyZoneSelectorState = {
65
+ hoverZone: BodyZone | null;
66
+ };
67
+
68
+ export class BodyZoneSelector extends Component<
69
+ BodyZoneSelectorProps,
70
+ BodyZoneSelectorState
71
+ > {
72
+ ref = createRef<HTMLDivElement>();
73
+ state: BodyZoneSelectorState = {
74
+ hoverZone: null,
75
+ };
76
+
77
+ render() {
78
+ const { hoverZone } = this.state;
79
+ const { scale = 3, selectedZone, theme = 'midnight' } = this.props;
80
+
81
+ return (
82
+ <div
83
+ ref={this.ref}
84
+ style={{
85
+ width: `${32 * scale}px`,
86
+ height: `${32 * scale}px`,
87
+ position: 'relative',
88
+ }}
89
+ >
90
+ <Image
91
+ src={resolveAsset(`body_zones.base_${theme}.png`)}
92
+ onClick={() => {
93
+ const onClick = this.props.onClick;
94
+ if (onClick && this.state.hoverZone) {
95
+ onClick(this.state.hoverZone);
96
+ }
97
+ }}
98
+ onMouseMove={(event) => {
99
+ if (!this.props.onClick) {
100
+ return;
101
+ }
102
+
103
+ const rect = this.ref.current?.getBoundingClientRect();
104
+ if (!rect) {
105
+ return;
106
+ }
107
+
108
+ const x = event.clientX - rect.left;
109
+ const y = 32 * scale - (event.clientY - rect.top);
110
+
111
+ this.setState({
112
+ hoverZone: bodyZonePixelToZone(x / scale, y / scale),
113
+ });
114
+ }}
115
+ style={{
116
+ position: 'absolute',
117
+ width: `${32 * scale}px`,
118
+ height: `${32 * scale}px`,
119
+ }}
120
+ />
121
+
122
+ {selectedZone && (
123
+ <Image
124
+ src={resolveAsset(`body_zones.${selectedZone}.png`)}
125
+ style={{
126
+ pointerEvents: 'none',
127
+ position: 'absolute',
128
+ width: `${32 * scale}px`,
129
+ height: `${32 * scale}px`,
130
+ }}
131
+ />
132
+ )}
133
+
134
+ {hoverZone && hoverZone !== selectedZone && (
135
+ <Image
136
+ src={resolveAsset(`body_zones.${hoverZone}.png`)}
137
+ style={{
138
+ opacity: '0.5',
139
+ pointerEvents: 'none',
140
+ position: 'absolute',
141
+ width: `${32 * scale}px`,
142
+ height: `${32 * scale}px`,
143
+ }}
144
+ />
145
+ )}
146
+ </div>
147
+ );
148
+ }
149
+ }