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,105 +1,105 @@
1
- /**
2
- * @file
3
- * @copyright 2020 Aleksej Komarov
4
- * @license MIT
5
- */
6
-
7
- import { classes } from '../common/react';
8
-
9
- import { BoxProps, computeBoxClassName, computeBoxProps, unit } from './Box';
10
-
11
- export type FlexProps = Partial<{
12
- align: string | boolean;
13
- direction: string;
14
- inline: boolean;
15
- justify: string;
16
- scrollable: boolean;
17
- style: Partial<HTMLDivElement['style']>;
18
- wrap: string | boolean;
19
- }> &
20
- BoxProps;
21
-
22
- export const computeFlexClassName = (props: FlexProps) => {
23
- return classes([
24
- 'Flex',
25
- props.inline && 'Flex--inline',
26
- computeBoxClassName(props),
27
- ]);
28
- };
29
-
30
- export const computeFlexProps = (props: FlexProps) => {
31
- const { className, direction, wrap, align, justify, inline, ...rest } = props;
32
-
33
- return computeBoxProps({
34
- style: {
35
- ...rest.style,
36
- flexDirection: direction,
37
- flexWrap: wrap === true ? 'wrap' : wrap,
38
- alignItems: align,
39
- justifyContent: justify,
40
- },
41
- ...rest,
42
- });
43
- };
44
-
45
- export const Flex = (props) => {
46
- const { className, ...rest } = props;
47
- return (
48
- <div
49
- className={classes([className, computeFlexClassName(rest)])}
50
- {...computeFlexProps(rest)}
51
- />
52
- );
53
- };
54
-
55
- export type FlexItemProps = BoxProps &
56
- Partial<{
57
- grow: number | boolean;
58
- order: number;
59
- shrink: number | boolean;
60
- basis: string | number;
61
- align: string | boolean;
62
- style: Partial<HTMLDivElement['style']>;
63
- }>;
64
-
65
- export const computeFlexItemClassName = (props: FlexItemProps) => {
66
- return classes(['Flex__item', computeBoxClassName(props)]);
67
- };
68
-
69
- export const computeFlexItemProps = (props: FlexItemProps) => {
70
- const { className, style, grow, order, shrink, basis, align, ...rest } =
71
- props;
72
-
73
- const computedBasis =
74
- basis ??
75
- // IE11: Set basis to specified width if it's known, which fixes certain
76
- // bugs when rendering tables inside the flex.
77
- props.width ??
78
- // If grow is used, basis should be set to 0 to be consistent with
79
- // flex css shorthand `flex: 1`.
80
- (grow !== undefined ? 0 : undefined);
81
-
82
- return computeBoxProps({
83
- style: {
84
- ...style,
85
- flexGrow: grow !== undefined && Number(grow),
86
- flexShrink: shrink !== undefined && Number(shrink),
87
- flexBasis: unit(computedBasis),
88
- order: order,
89
- alignSelf: align,
90
- },
91
- ...rest,
92
- });
93
- };
94
-
95
- const FlexItem = (props) => {
96
- const { className, ...rest } = props;
97
- return (
98
- <div
99
- className={classes([className, computeFlexItemClassName(props)])}
100
- {...computeFlexItemProps(rest)}
101
- />
102
- );
103
- };
104
-
105
- Flex.Item = FlexItem;
1
+ /**
2
+ * @file
3
+ * @copyright 2020 Aleksej Komarov
4
+ * @license MIT
5
+ */
6
+
7
+ import { classes } from '../common/react';
8
+
9
+ import { BoxProps, computeBoxClassName, computeBoxProps, unit } from './Box';
10
+
11
+ export type FlexProps = Partial<{
12
+ align: string | boolean;
13
+ direction: string;
14
+ inline: boolean;
15
+ justify: string;
16
+ scrollable: boolean;
17
+ style: Partial<HTMLDivElement['style']>;
18
+ wrap: string | boolean;
19
+ }> &
20
+ BoxProps;
21
+
22
+ export const computeFlexClassName = (props: FlexProps) => {
23
+ return classes([
24
+ 'Flex',
25
+ props.inline && 'Flex--inline',
26
+ computeBoxClassName(props),
27
+ ]);
28
+ };
29
+
30
+ export const computeFlexProps = (props: FlexProps) => {
31
+ const { className, direction, wrap, align, justify, inline, ...rest } = props;
32
+
33
+ return computeBoxProps({
34
+ style: {
35
+ ...rest.style,
36
+ flexDirection: direction,
37
+ flexWrap: wrap === true ? 'wrap' : wrap,
38
+ alignItems: align,
39
+ justifyContent: justify,
40
+ },
41
+ ...rest,
42
+ });
43
+ };
44
+
45
+ export const Flex = (props) => {
46
+ const { className, ...rest } = props;
47
+ return (
48
+ <div
49
+ className={classes([className, computeFlexClassName(rest)])}
50
+ {...computeFlexProps(rest)}
51
+ />
52
+ );
53
+ };
54
+
55
+ export type FlexItemProps = BoxProps &
56
+ Partial<{
57
+ grow: number | boolean;
58
+ order: number;
59
+ shrink: number | boolean;
60
+ basis: string | number;
61
+ align: string | boolean;
62
+ style: Partial<HTMLDivElement['style']>;
63
+ }>;
64
+
65
+ export const computeFlexItemClassName = (props: FlexItemProps) => {
66
+ return classes(['Flex__item', computeBoxClassName(props)]);
67
+ };
68
+
69
+ export const computeFlexItemProps = (props: FlexItemProps) => {
70
+ const { className, style, grow, order, shrink, basis, align, ...rest } =
71
+ props;
72
+
73
+ const computedBasis =
74
+ basis ??
75
+ // IE11: Set basis to specified width if it's known, which fixes certain
76
+ // bugs when rendering tables inside the flex.
77
+ props.width ??
78
+ // If grow is used, basis should be set to 0 to be consistent with
79
+ // flex css shorthand `flex: 1`.
80
+ (grow !== undefined ? 0 : undefined);
81
+
82
+ return computeBoxProps({
83
+ style: {
84
+ ...style,
85
+ flexGrow: grow !== undefined && Number(grow),
86
+ flexShrink: shrink !== undefined && Number(shrink),
87
+ flexBasis: unit(computedBasis),
88
+ order: order,
89
+ alignSelf: align,
90
+ },
91
+ ...rest,
92
+ });
93
+ };
94
+
95
+ const FlexItem = (props) => {
96
+ const { className, ...rest } = props;
97
+ return (
98
+ <div
99
+ className={classes([className, computeFlexItemClassName(props)])}
100
+ {...computeFlexItemProps(rest)}
101
+ />
102
+ );
103
+ };
104
+
105
+ Flex.Item = FlexItem;
@@ -1,91 +1,91 @@
1
- /**
2
- * @file
3
- * @copyright 2020 Aleksej Komarov
4
- * @author Original Aleksej Komarov
5
- * @author Changes ThePotato97
6
- * @license MIT
7
- */
8
-
9
- import { BooleanLike, classes } from '../common/react';
10
- import { ReactNode } from 'react';
11
-
12
- import { BoxProps, computeBoxClassName, computeBoxProps } from './Box';
13
-
14
- const FA_OUTLINE_REGEX = /-o$/;
15
-
16
- type IconPropsUnique = { name: string } & Partial<{
17
- size: number;
18
- spin: BooleanLike;
19
- className: string;
20
- rotation: number;
21
- style: Partial<HTMLDivElement['style']>;
22
- }>;
23
-
24
- export type IconProps = IconPropsUnique & BoxProps;
25
-
26
- export const Icon = (props: IconProps) => {
27
- const { name, size, spin, className, rotation, ...rest } = props;
28
-
29
- const customStyle = rest.style || {};
30
- if (size) {
31
- customStyle.fontSize = size * 100 + '%';
32
- }
33
- if (rotation) {
34
- customStyle.transform = `rotate(${rotation}deg)`;
35
- }
36
- rest.style = customStyle;
37
-
38
- const boxProps = computeBoxProps(rest);
39
-
40
- let iconClass = '';
41
- if (name.startsWith('tg-')) {
42
- // tgfont icon
43
- iconClass = name;
44
- } else {
45
- // font awesome icon
46
- const faRegular = FA_OUTLINE_REGEX.test(name);
47
- const faName = name.replace(FA_OUTLINE_REGEX, '');
48
- const preprendFa = !faName.startsWith('fa-');
49
-
50
- iconClass = faRegular ? 'far ' : 'fas ';
51
- if (preprendFa) {
52
- iconClass += 'fa-';
53
- }
54
- iconClass += faName;
55
- if (spin) {
56
- iconClass += ' fa-spin';
57
- }
58
- }
59
- return (
60
- <i
61
- className={classes([
62
- 'Icon',
63
- iconClass,
64
- className,
65
- computeBoxClassName(rest),
66
- ])}
67
- {...boxProps}
68
- />
69
- );
70
- };
71
-
72
- type IconStackUnique = {
73
- children: ReactNode;
74
- className?: string;
75
- };
76
-
77
- export type IconStackProps = IconStackUnique & BoxProps;
78
-
79
- export const IconStack = (props: IconStackProps) => {
80
- const { className, children, ...rest } = props;
81
- return (
82
- <span
83
- className={classes(['IconStack', className, computeBoxClassName(rest)])}
84
- {...computeBoxProps(rest)}
85
- >
86
- {children}
87
- </span>
88
- );
89
- };
90
-
91
- Icon.Stack = IconStack;
1
+ /**
2
+ * @file
3
+ * @copyright 2020 Aleksej Komarov
4
+ * @author Original Aleksej Komarov
5
+ * @author Changes ThePotato97
6
+ * @license MIT
7
+ */
8
+
9
+ import { BooleanLike, classes } from '../common/react';
10
+ import { ReactNode } from 'react';
11
+
12
+ import { BoxProps, computeBoxClassName, computeBoxProps } from './Box';
13
+
14
+ const FA_OUTLINE_REGEX = /-o$/;
15
+
16
+ type IconPropsUnique = { name: string } & Partial<{
17
+ size: number;
18
+ spin: BooleanLike;
19
+ className: string;
20
+ rotation: number;
21
+ style: Partial<HTMLDivElement['style']>;
22
+ }>;
23
+
24
+ export type IconProps = IconPropsUnique & BoxProps;
25
+
26
+ export const Icon = (props: IconProps) => {
27
+ const { name, size, spin, className, rotation, ...rest } = props;
28
+
29
+ const customStyle = rest.style || {};
30
+ if (size) {
31
+ customStyle.fontSize = size * 100 + '%';
32
+ }
33
+ if (rotation) {
34
+ customStyle.transform = `rotate(${rotation}deg)`;
35
+ }
36
+ rest.style = customStyle;
37
+
38
+ const boxProps = computeBoxProps(rest);
39
+
40
+ let iconClass = '';
41
+ if (name.startsWith('tg-')) {
42
+ // tgfont icon
43
+ iconClass = name;
44
+ } else {
45
+ // font awesome icon
46
+ const faRegular = FA_OUTLINE_REGEX.test(name);
47
+ const faName = name.replace(FA_OUTLINE_REGEX, '');
48
+ const preprendFa = !faName.startsWith('fa-');
49
+
50
+ iconClass = faRegular ? 'far ' : 'fas ';
51
+ if (preprendFa) {
52
+ iconClass += 'fa-';
53
+ }
54
+ iconClass += faName;
55
+ if (spin) {
56
+ iconClass += ' fa-spin';
57
+ }
58
+ }
59
+ return (
60
+ <i
61
+ className={classes([
62
+ 'Icon',
63
+ iconClass,
64
+ className,
65
+ computeBoxClassName(rest),
66
+ ])}
67
+ {...boxProps}
68
+ />
69
+ );
70
+ };
71
+
72
+ type IconStackUnique = {
73
+ children: ReactNode;
74
+ className?: string;
75
+ };
76
+
77
+ export type IconStackProps = IconStackUnique & BoxProps;
78
+
79
+ export const IconStack = (props: IconStackProps) => {
80
+ const { className, children, ...rest } = props;
81
+ return (
82
+ <span
83
+ className={classes(['IconStack', className, computeBoxClassName(rest)])}
84
+ {...computeBoxProps(rest)}
85
+ >
86
+ {children}
87
+ </span>
88
+ );
89
+ };
90
+
91
+ Icon.Stack = IconStack;