tgui-core 1.0.2 → 1.0.4

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} +67 -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 +368 -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,162 +1,162 @@
1
- /**
2
- * @file
3
- * @copyright 2020 Aleksej Komarov
4
- * @license MIT
5
- */
6
-
7
- import { BooleanLike } from '../common/react';
8
-
9
- import { resolveAsset } from '../assets';
10
- import { useBackend } from '../backend';
11
- import { Box } from '../components/Box';
12
- import { Button } from '../components/Button';
13
- import { Window } from './Window';
14
-
15
- export type NTOSData = {
16
- authenticatedUser: string | null;
17
- authIDName: string;
18
- comp_light_color: string;
19
- has_id: BooleanLike;
20
- has_light: BooleanLike;
21
- id_name: string;
22
- light_on: BooleanLike;
23
- login: Login;
24
- pai: string | null;
25
- PC_batteryicon: string | null;
26
- PC_batterypercent: string | null;
27
- PC_device_theme: string;
28
- PC_lowpower_mode: BooleanLike;
29
- PC_ntneticon: string;
30
- PC_programheaders: Program[];
31
- PC_showexitprogram: BooleanLike;
32
- PC_stationdate: string;
33
- PC_stationtime: string;
34
- programs: Program[];
35
- proposed_login: Login;
36
- removable_media: string[];
37
- show_imprint: BooleanLike;
38
- };
39
-
40
- type Program = {
41
- alert: BooleanLike;
42
- desc: string;
43
- header_program: BooleanLike;
44
- icon: string;
45
- name: string;
46
- running: BooleanLike;
47
- };
48
-
49
- type Login = {
50
- IDInserted?: BooleanLike;
51
- IDJob: string | null;
52
- IDName: string | null;
53
- };
54
-
55
- export const NtosWindow = (props) => {
56
- const { title, width = 575, height = 700, children } = props;
57
- const { act, data } = useBackend<NTOSData>();
58
- const {
59
- PC_device_theme,
60
- PC_batteryicon,
61
- PC_batterypercent,
62
- PC_ntneticon,
63
- PC_stationdate,
64
- PC_stationtime,
65
- PC_programheaders = [],
66
- PC_showexitprogram,
67
- PC_lowpower_mode,
68
- } = data;
69
-
70
- return (
71
- <Window title={title} width={width} height={height} theme={PC_device_theme}>
72
- <div className="NtosWindow">
73
- <div className="NtosWindow__header NtosHeader">
74
- <div className="NtosHeader__left">
75
- <Box inline bold mr={2}>
76
- <Button
77
- width="26px"
78
- lineHeight="22px"
79
- textAlign="left"
80
- tooltip={PC_stationdate}
81
- color="transparent"
82
- icon="calendar"
83
- tooltipPosition="bottom"
84
- />
85
- {PC_stationtime}
86
- </Box>
87
- <Box inline italic mr={2} opacity={0.33}>
88
- {(PC_device_theme === 'syndicate' && 'Syndix') || 'NtOS'}
89
- {!!PC_lowpower_mode && ' - RUNNING ON LOW POWER MODE'}
90
- </Box>
91
- </div>
92
- <div className="NtosHeader__right">
93
- {PC_programheaders.map((header) => (
94
- <Box key={header.icon} inline mr={1}>
95
- <img
96
- className="NtosHeader__icon"
97
- src={resolveAsset(header.icon)}
98
- />
99
- </Box>
100
- ))}
101
- <Box inline>
102
- {PC_ntneticon && (
103
- <img
104
- className="NtosHeader__icon"
105
- src={resolveAsset(PC_ntneticon)}
106
- />
107
- )}
108
- </Box>
109
- {!!PC_batteryicon && (
110
- <Box inline mr={1}>
111
- <img
112
- className="NtosHeader__icon"
113
- src={resolveAsset(PC_batteryicon)}
114
- />
115
- {PC_batterypercent}
116
- </Box>
117
- )}
118
- {!!PC_showexitprogram && (
119
- <Button
120
- color="transparent"
121
- icon="window-minimize-o"
122
- tooltip="Minimize"
123
- tooltipPosition="bottom"
124
- onClick={() => act('PC_minimize')}
125
- />
126
- )}
127
- {!!PC_showexitprogram && (
128
- <Button
129
- color="transparent"
130
- icon="window-close-o"
131
- tooltip="Close"
132
- tooltipPosition="bottom-start"
133
- onClick={() => act('PC_exit')}
134
- />
135
- )}
136
- {!PC_showexitprogram && (
137
- <Button
138
- textAlign="center"
139
- color="transparent"
140
- icon="power-off"
141
- tooltip="Power off"
142
- tooltipPosition="bottom-start"
143
- onClick={() => act('PC_shutdown')}
144
- />
145
- )}
146
- </div>
147
- </div>
148
- {children}
149
- </div>
150
- </Window>
151
- );
152
- };
153
-
154
- const NtosWindowContent = (props) => {
155
- return (
156
- <div className="NtosWindow__content">
157
- <Window.Content {...props} />
158
- </div>
159
- );
160
- };
161
-
162
- NtosWindow.Content = NtosWindowContent;
1
+ /**
2
+ * @file
3
+ * @copyright 2020 Aleksej Komarov
4
+ * @license MIT
5
+ */
6
+
7
+ import { BooleanLike } from '../common/react';
8
+
9
+ import { resolveAsset } from '../src/assets';
10
+ import { useBackend } from '../src/backend';
11
+ import { Box } from '../components/Box';
12
+ import { Button } from '../components/Button';
13
+ import { Window } from './Window';
14
+
15
+ export type NTOSData = {
16
+ authenticatedUser: string | null;
17
+ authIDName: string;
18
+ comp_light_color: string;
19
+ has_id: BooleanLike;
20
+ has_light: BooleanLike;
21
+ id_name: string;
22
+ light_on: BooleanLike;
23
+ login: Login;
24
+ pai: string | null;
25
+ PC_batteryicon: string | null;
26
+ PC_batterypercent: string | null;
27
+ PC_device_theme: string;
28
+ PC_lowpower_mode: BooleanLike;
29
+ PC_ntneticon: string;
30
+ PC_programheaders: Program[];
31
+ PC_showexitprogram: BooleanLike;
32
+ PC_stationdate: string;
33
+ PC_stationtime: string;
34
+ programs: Program[];
35
+ proposed_login: Login;
36
+ removable_media: string[];
37
+ show_imprint: BooleanLike;
38
+ };
39
+
40
+ type Program = {
41
+ alert: BooleanLike;
42
+ desc: string;
43
+ header_program: BooleanLike;
44
+ icon: string;
45
+ name: string;
46
+ running: BooleanLike;
47
+ };
48
+
49
+ type Login = {
50
+ IDInserted?: BooleanLike;
51
+ IDJob: string | null;
52
+ IDName: string | null;
53
+ };
54
+
55
+ export const NtosWindow = (props) => {
56
+ const { title, width = 575, height = 700, children } = props;
57
+ const { act, data } = useBackend<NTOSData>();
58
+ const {
59
+ PC_device_theme,
60
+ PC_batteryicon,
61
+ PC_batterypercent,
62
+ PC_ntneticon,
63
+ PC_stationdate,
64
+ PC_stationtime,
65
+ PC_programheaders = [],
66
+ PC_showexitprogram,
67
+ PC_lowpower_mode,
68
+ } = data;
69
+
70
+ return (
71
+ <Window title={title} width={width} height={height} theme={PC_device_theme}>
72
+ <div className="NtosWindow">
73
+ <div className="NtosWindow__header NtosHeader">
74
+ <div className="NtosHeader__left">
75
+ <Box inline bold mr={2}>
76
+ <Button
77
+ width="26px"
78
+ lineHeight="22px"
79
+ textAlign="left"
80
+ tooltip={PC_stationdate}
81
+ color="transparent"
82
+ icon="calendar"
83
+ tooltipPosition="bottom"
84
+ />
85
+ {PC_stationtime}
86
+ </Box>
87
+ <Box inline italic mr={2} opacity={0.33}>
88
+ {(PC_device_theme === 'syndicate' && 'Syndix') || 'NtOS'}
89
+ {!!PC_lowpower_mode && ' - RUNNING ON LOW POWER MODE'}
90
+ </Box>
91
+ </div>
92
+ <div className="NtosHeader__right">
93
+ {PC_programheaders.map((header) => (
94
+ <Box key={header.icon} inline mr={1}>
95
+ <img
96
+ className="NtosHeader__icon"
97
+ src={resolveAsset(header.icon)}
98
+ />
99
+ </Box>
100
+ ))}
101
+ <Box inline>
102
+ {PC_ntneticon && (
103
+ <img
104
+ className="NtosHeader__icon"
105
+ src={resolveAsset(PC_ntneticon)}
106
+ />
107
+ )}
108
+ </Box>
109
+ {!!PC_batteryicon && (
110
+ <Box inline mr={1}>
111
+ <img
112
+ className="NtosHeader__icon"
113
+ src={resolveAsset(PC_batteryicon)}
114
+ />
115
+ {PC_batterypercent}
116
+ </Box>
117
+ )}
118
+ {!!PC_showexitprogram && (
119
+ <Button
120
+ color="transparent"
121
+ icon="window-minimize-o"
122
+ tooltip="Minimize"
123
+ tooltipPosition="bottom"
124
+ onClick={() => act('PC_minimize')}
125
+ />
126
+ )}
127
+ {!!PC_showexitprogram && (
128
+ <Button
129
+ color="transparent"
130
+ icon="window-close-o"
131
+ tooltip="Close"
132
+ tooltipPosition="bottom-start"
133
+ onClick={() => act('PC_exit')}
134
+ />
135
+ )}
136
+ {!PC_showexitprogram && (
137
+ <Button
138
+ textAlign="center"
139
+ color="transparent"
140
+ icon="power-off"
141
+ tooltip="Power off"
142
+ tooltipPosition="bottom-start"
143
+ onClick={() => act('PC_shutdown')}
144
+ />
145
+ )}
146
+ </div>
147
+ </div>
148
+ {children}
149
+ </div>
150
+ </Window>
151
+ );
152
+ };
153
+
154
+ const NtosWindowContent = (props) => {
155
+ return (
156
+ <div className="NtosWindow__content">
157
+ <Window.Content {...props} />
158
+ </div>
159
+ );
160
+ };
161
+
162
+ NtosWindow.Content = NtosWindowContent;
@@ -1,56 +1,56 @@
1
- /**
2
- * @file
3
- * @copyright 2020 Aleksej Komarov
4
- * @license MIT
5
- */
6
-
7
- import { classes } from '../common/react';
8
-
9
- import { useBackend } from '../backend';
10
- import { Box, BoxProps } from '../components/Box';
11
- import { useDebug } from '../debug';
12
- import { Layout } from './Layout';
13
-
14
- type Props = Partial<{
15
- theme: string;
16
- }> &
17
- BoxProps;
18
-
19
- export function Pane(props: Props) {
20
- const { theme, children, className, ...rest } = props;
21
- const { suspended } = useBackend();
22
- const { debugLayout = false } = useDebug();
23
-
24
- return (
25
- <Layout className={classes(['Window', className])} theme={theme} {...rest}>
26
- <Box fillPositionedParent className={debugLayout && 'debug-layout'}>
27
- {!suspended && children}
28
- </Box>
29
- </Layout>
30
- );
31
- }
32
-
33
- type ContentProps = Partial<{
34
- fitted: boolean;
35
- scrollable: boolean;
36
- }> &
37
- BoxProps;
38
-
39
- function PaneContent(props: ContentProps) {
40
- const { className, fitted, children, ...rest } = props;
41
-
42
- return (
43
- <Layout.Content
44
- className={classes(['Window__content', className])}
45
- {...rest}
46
- >
47
- {fitted ? (
48
- children
49
- ) : (
50
- <div className="Window__contentPadding">{children}</div>
51
- )}
52
- </Layout.Content>
53
- );
54
- }
55
-
56
- Pane.Content = PaneContent;
1
+ /**
2
+ * @file
3
+ * @copyright 2020 Aleksej Komarov
4
+ * @license MIT
5
+ */
6
+
7
+ import { classes } from '../common/react';
8
+
9
+ import { useBackend } from '../src/backend';
10
+ import { Box, BoxProps } from '../components/Box';
11
+ import { useDebug } from '../debug';
12
+ import { Layout } from './Layout';
13
+
14
+ type Props = Partial<{
15
+ theme: string;
16
+ }> &
17
+ BoxProps;
18
+
19
+ export function Pane(props: Props) {
20
+ const { theme, children, className, ...rest } = props;
21
+ const { suspended } = useBackend();
22
+ const { debugLayout = false } = useDebug();
23
+
24
+ return (
25
+ <Layout className={classes(['Window', className])} theme={theme} {...rest}>
26
+ <Box fillPositionedParent className={debugLayout && 'debug-layout'}>
27
+ {!suspended && children}
28
+ </Box>
29
+ </Layout>
30
+ );
31
+ }
32
+
33
+ type ContentProps = Partial<{
34
+ fitted: boolean;
35
+ scrollable: boolean;
36
+ }> &
37
+ BoxProps;
38
+
39
+ function PaneContent(props: ContentProps) {
40
+ const { className, fitted, children, ...rest } = props;
41
+
42
+ return (
43
+ <Layout.Content
44
+ className={classes(['Window__content', className])}
45
+ {...rest}
46
+ >
47
+ {fitted ? (
48
+ children
49
+ ) : (
50
+ <div className="Window__contentPadding">{children}</div>
51
+ )}
52
+ </Layout.Content>
53
+ );
54
+ }
55
+
56
+ Pane.Content = PaneContent;