-
- Hello world!
-
+ Hello world!
Label
@@ -1011,7 +972,7 @@ A straight forward mapping to `` element.
- See inherited props: [Box](#box)
- `collapsing: boolean` - Collapses table cell to the smallest possible size,
-and stops any text inside from wrapping.
+ and stops any text inside from wrapping.
### `Tabs`
@@ -1047,9 +1008,7 @@ Tabs also support a vertical configuration. This is usually paired with
```jsx
-
- ...
-
+ ...
Tab content.
@@ -1063,9 +1022,7 @@ component:
```jsx
-
- ...
-
+ ...
... other things ...
```
@@ -1075,9 +1032,9 @@ component:
- See inherited props: [Box](#box)
- `fluid: boolean` - If true, tabs will take all available horizontal space.
- `fill: boolean` - Similarly to `fill` on [Section](#section), tabs will fill
-all available vertical space. Only makes sense in a vertical configuration.
+ all available vertical space. Only makes sense in a vertical configuration.
- `vertical: boolean` - Use a vertical configuration, where tabs will be
-stacked vertically.
+ stacked vertically.
- `children: Tab[]` - This component only accepts tabs as its children.
### `Tabs.Tab`
@@ -1089,8 +1046,8 @@ a lot of `Button` props.
- See inherited props: [Button](#button)
- `altSelection` - Whether the tab buttons select via standard select (color
-change) or by adding a white indicator to the selected tab.
-Intended for usage on interfaces where tab color has relevance.
+ change) or by adding a white indicator to the selected tab.
+ Intended for usage on interfaces where tab color has relevance.
- `icon: string` - Tab icon.
- `children: any` - Tab text.
- `onClick: function` - Called when element is clicked.
@@ -1107,9 +1064,7 @@ Usage:
```jsx
-
- Sample text.
-
+ Sample text.
```
@@ -1117,7 +1072,7 @@ Usage:
- `position?: string` - Tooltip position. See [`Popper`](#Popper) for valid options. Defaults to "auto".
- `content: string` - Content of the tooltip. Must be a plain string.
-Fragments or other elements are **not** supported.
+ Fragments or other elements are **not** supported.
## `tgui/layouts`
@@ -1131,9 +1086,7 @@ Example:
```jsx
-
- Hello, world!
-
+ Hello, world!
```
@@ -1148,9 +1101,9 @@ Example:
- `height: number` - Window height.
- `canClose: boolean` - Controls the ability to close the window.
- `children: any` - Child elements, which are rendered directly inside the
-window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI,
-they should be put as direct childs of a Window, otherwise you should be
-putting your content into [Window.Content](#windowcontent).
+ window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI,
+ they should be put as direct childs of a Window, otherwise you should be
+ putting your content into [Window.Content](#windowcontent).
### `Window.Content`
diff --git a/tgui/jest.config.js b/tgui/jest.config.js
index 8b78818004be..d8b4ac3e41a8 100644
--- a/tgui/jest.config.js
+++ b/tgui/jest.config.js
@@ -8,7 +8,7 @@ module.exports = {
testEnvironment: 'jsdom',
testRunner: require.resolve('jest-circus/runner'),
transform: {
- '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'),
+ '^.+\\.(js|cjs|ts|tsx)$': require.resolve('@swc/jest'),
},
moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'],
resetMocks: true,
diff --git a/tgui/package.json b/tgui/package.json
index 227644791f22..add7b7478999 100644
--- a/tgui/package.json
+++ b/tgui/package.json
@@ -22,22 +22,14 @@
"tgui:eslint-fix": "eslint --fix packages --ext .js,.jsx,.cjs,.ts,.tsx"
},
"dependencies": {
- "@babel/core": "^7.15.0",
- "@babel/eslint-parser": "^7.15.0",
- "@babel/plugin-proposal-class-properties": "^7.14.5",
- "@babel/plugin-transform-jscript": "^7.14.5",
- "@babel/preset-env": "^7.15.0",
- "@babel/preset-typescript": "^7.15.0",
+ "@swc/core": "^1.5.24",
+ "@swc/jest": "^0.2.36",
"@types/jest": "^27.0.1",
"@types/jsdom": "^16.2.13",
"@types/node": "^14.17.9",
"@types/webpack": "^5.28.0",
"@types/webpack-env": "^1.16.2",
"@typescript-eslint/parser": "^4.29.1",
- "babel-jest": "^27.0.6",
- "babel-loader": "^8.2.2",
- "babel-plugin-inferno": "^6.3.0",
- "babel-plugin-transform-remove-console": "^6.9.4",
"common": "workspace:*",
"css-loader": "^5.2.7",
"esbuild-loader": "^4.1.0",
@@ -47,7 +39,6 @@
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-unused-imports": "^1.1.4",
"file-loader": "^6.2.0",
- "inferno": "^7.4.8",
"jest": "^27.0.6",
"jest-circus": "^27.0.6",
"jsdom": "^16.7.0",
@@ -56,6 +47,7 @@
"sass": "^1.37.5",
"sass-loader": "^11.1.1",
"style-loader": "^2.0.0",
+ "swc-loader": "^0.2.6",
"typescript": "^4.3.5",
"url-loader": "^4.1.1",
"webpack": "^5.75.0",
diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json
index 54d73251a65a..ebae63c887f9 100644
--- a/tgui/packages/common/package.json
+++ b/tgui/packages/common/package.json
@@ -1,5 +1,5 @@
{
"private": true,
"name": "common",
- "version": "4.3.0"
+ "version": "5.0.0"
}
diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts
index 6789bb4edc65..938a1e303a16 100644
--- a/tgui/packages/common/react.ts
+++ b/tgui/packages/common/react.ts
@@ -51,15 +51,6 @@ export const shallowDiffers = (a: object, b: object) => {
return false;
};
-/**
- * Default inferno hooks for pure components.
- */
-export const pureComponentHooks = {
- onComponentShouldUpdate: (lastProps, nextProps) => {
- return shallowDiffers(lastProps, nextProps);
- },
-};
-
/**
* A helper to determine whether the object is renderable by React.
*/
diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs
deleted file mode 100644
index 97ca67c6ea4c..000000000000
--- a/tgui/packages/common/string.babel-plugin.cjs
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * This plugin saves overall about 10KB on the final bundle size, so it's
- * sort of worth it.
- *
- * We are using a .cjs extension because:
- *
- * 1. Webpack CLI only supports CommonJS modules;
- * 2. tgui-dev-server supports both, but we still need to signal NodeJS
- * to import it as a CommonJS module, hence .cjs extension.
- *
- * We need to copy-paste the whole "multiline" function because we can't
- * synchronously import an ES module from a CommonJS module.
- *
- * @file
- * @copyright 2020 Aleksej Komarov
- * @license MIT
- */
-
-/**
- * Removes excess whitespace and indentation from the string.
- */
-const multiline = (str) => {
- const lines = str.split('\n');
- // Determine base indentation
- let minIndent;
- for (let line of lines) {
- for (let indent = 0; indent < line.length; indent++) {
- const char = line[indent];
- if (char !== ' ') {
- if (minIndent === undefined || indent < minIndent) {
- minIndent = indent;
- }
- break;
- }
- }
- }
- if (!minIndent) {
- minIndent = 0;
- }
- // Remove this base indentation and trim the resulting string
- // from both ends.
- return lines
- .map((line) => line.substr(minIndent).trimRight())
- .join('\n')
- .trim();
-};
-
-const StringPlugin = (ref) => {
- return {
- visitor: {
- TaggedTemplateExpression: (path) => {
- if (path.node.tag.name === 'multiline') {
- const { quasi } = path.node;
- if (quasi.expressions.length > 0) {
- throw new Error('Multiline tag does not support expressions!');
- }
- if (quasi.quasis.length > 1) {
- throw new Error('Quasis is longer than 1');
- }
- const { value } = quasi.quasis[0];
- value.raw = multiline(value.raw);
- value.cooked = multiline(value.cooked);
- path.replaceWith(quasi);
- }
- },
- },
- };
-};
-
-module.exports = {
- __esModule: true,
- default: StringPlugin,
-};
diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js
index 7ed73a0b2860..f13b23592e9f 100644
--- a/tgui/packages/common/string.js
+++ b/tgui/packages/common/string.js
@@ -4,39 +4,6 @@
* @license MIT
*/
-/**
- * Removes excess whitespace and indentation from the string.
- */
-export const multiline = (str) => {
- if (Array.isArray(str)) {
- // Small stub to allow usage as a template tag
- return multiline(str.join(''));
- }
- const lines = str.split('\n');
- // Determine base indentation
- let minIndent;
- for (let line of lines) {
- for (let indent = 0; indent < line.length; indent++) {
- const char = line[indent];
- if (char !== ' ') {
- if (minIndent === undefined || indent < minIndent) {
- minIndent = indent;
- }
- break;
- }
- }
- }
- if (!minIndent) {
- minIndent = 0;
- }
- // Remove this base indentation and trim the resulting string
- // from both ends.
- return lines
- .map((line) => line.substr(minIndent).trimRight())
- .join('\n')
- .trim();
-};
-
/**
* Creates a glob pattern matcher.
*
diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json
index 3641e2cbf258..5a77fe33393f 100644
--- a/tgui/packages/tgui-bench/package.json
+++ b/tgui/packages/tgui-bench/package.json
@@ -1,16 +1,15 @@
{
"private": true,
"name": "tgui-bench",
- "version": "4.3.0",
+ "version": "5.0.0",
"dependencies": {
"@types/node": "^14.17.9",
"common": "workspace:*",
"fastify": "^3.20.2",
"fastify-static": "^4.2.3",
- "inferno": "^7.4.8",
- "inferno-vnode-flags": "^7.4.8",
"lodash": "^4.17.21",
"platform": "^1.3.6",
+ "react": "^18.3.1",
"tgui": "workspace:*"
}
}
diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx
index 6b806d720ab8..70e7219d4437 100644
--- a/tgui/packages/tgui-bench/tests/Button.test.tsx
+++ b/tgui/packages/tgui-bench/tests/Button.test.tsx
@@ -1,4 +1,3 @@
-import { linkEvent } from 'inferno';
import { Button } from 'tgui/components';
import { createRenderer } from 'tgui/renderer';
@@ -16,13 +15,6 @@ export const SingleButtonWithCallback = () => {
render(node);
};
-export const SingleButtonWithLinkEvent = () => {
- const node = (
- Hello world!
- );
- render(node);
-};
-
export const ListOfButtons = () => {
const nodes: JSX.Element[] = [];
for (let i = 0; i < 100; i++) {
@@ -45,19 +37,6 @@ export const ListOfButtonsWithCallback = () => {
render({nodes}
);
};
-export const ListOfButtonsWithLinkEvent = () => {
- const nodes: JSX.Element[] = [];
- for (let i = 0; i < 100; i++) {
- const node = (
-
- Hello world! {i}
-
- );
- nodes.push(node);
- }
- render({nodes}
);
-};
-
export const ListOfButtonsWithIcons = () => {
const nodes: JSX.Element[] = [];
for (let i = 0; i < 100; i++) {
diff --git a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx
index 3832d4fc9ca4..3497c41e8fa0 100644
--- a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx
+++ b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx
@@ -1,21 +1,19 @@
-import { backendUpdate } from 'tgui/backend';
+import { backendUpdate, setGlobalStore } from 'tgui/backend';
import { DisposalUnit } from 'tgui/interfaces/DisposalUnit';
import { createRenderer } from 'tgui/renderer';
-import { configureStore, StoreProvider } from 'tgui/store';
+import { configureStore } from 'tgui/store';
const store = configureStore({ sideEffets: false });
const renderUi = createRenderer((dataJson: string) => {
+ setGlobalStore(store);
+
store.dispatch(
backendUpdate({
data: Byond.parseJson(dataJson),
}),
);
- return (
-
-
-
- );
+ return ;
});
export const data = JSON.stringify({
diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json
index 8ee0e019ee0a..51e7271fc99b 100644
--- a/tgui/packages/tgui-dev-server/package.json
+++ b/tgui/packages/tgui-dev-server/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "tgui-dev-server",
- "version": "4.3.0",
+ "version": "5.0.0",
"type": "module",
"dependencies": {
"axios": "^0.21.1",
diff --git a/tgui/packages/tgui-panel/Panel.jsx b/tgui/packages/tgui-panel/Panel.tsx
similarity index 99%
rename from tgui/packages/tgui-panel/Panel.jsx
rename to tgui/packages/tgui-panel/Panel.tsx
index 82d4d4624ab3..04182f5eb6ed 100644
--- a/tgui/packages/tgui-panel/Panel.jsx
+++ b/tgui/packages/tgui-panel/Panel.tsx
@@ -25,6 +25,7 @@ export const Panel = (props) => {
return ;
}
}
+
return (
diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx
index abe9191fad4f..8fd6d0bc4f98 100644
--- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx
+++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx
@@ -26,9 +26,9 @@ export const NowPlayingWidget = (props) => {
mx={0.5}
grow={1}
style={{
- 'white-space': 'nowrap',
+ whiteSpace: 'nowrap',
overflow: 'hidden',
- 'text-overflow': 'ellipsis',
+ textOverflow: 'ellipsis',
}}
>
{title || 'Unknown Track'}
diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.jsx b/tgui/packages/tgui-panel/chat/ChatPanel.jsx
index 1577e933fb4c..36e86876f509 100644
--- a/tgui/packages/tgui-panel/chat/ChatPanel.jsx
+++ b/tgui/packages/tgui-panel/chat/ChatPanel.jsx
@@ -5,13 +5,13 @@
*/
import { shallowDiffers } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { Button } from 'tgui/components';
import { chatRenderer } from './renderer';
export class ChatPanel extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.ref = createRef();
this.state = {
scrollTracking: true,
diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.jsx b/tgui/packages/tgui-panel/chat/ChatTabs.jsx
index 9ef736bd554a..ed3a285c204f 100644
--- a/tgui/packages/tgui-panel/chat/ChatTabs.jsx
+++ b/tgui/packages/tgui-panel/chat/ChatTabs.jsx
@@ -13,11 +13,11 @@ import { openChatSettings } from '../settings/actions';
const UnreadCountWidget = ({ value }) => (
diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.ts
similarity index 100%
rename from tgui/packages/tgui-panel/chat/constants.js
rename to tgui/packages/tgui-panel/chat/constants.ts
diff --git a/tgui/packages/tgui-panel/chat/index.js b/tgui/packages/tgui-panel/chat/index.ts
similarity index 100%
rename from tgui/packages/tgui-panel/chat/index.js
rename to tgui/packages/tgui-panel/chat/index.ts
diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.jsx
similarity index 97%
rename from tgui/packages/tgui-panel/chat/renderer.js
rename to tgui/packages/tgui-panel/chat/renderer.jsx
index f84137261ede..45b9654613d6 100644
--- a/tgui/packages/tgui-panel/chat/renderer.js
+++ b/tgui/packages/tgui-panel/chat/renderer.jsx
@@ -16,15 +16,16 @@ import {
MAX_PERSISTED_MESSAGES,
MAX_VISIBLE_MESSAGES,
MESSAGE_PRUNE_INTERVAL,
+ MESSAGE_TYPES,
MESSAGE_TYPE_COMBAT,
MESSAGE_TYPE_INTERNAL,
MESSAGE_TYPE_LOCALCHAT,
MESSAGE_TYPE_UNKNOWN,
} from './constants';
-import { render } from 'inferno';
import { canPageAcceptType, createMessage, isSameMessage } from './model';
import { highlightNode, linkifyNode } from './replaceInTextNode';
-import { Tooltip } from '../../tgui/components';
+import { Tooltip } from 'tgui/components';
+import { createRoot } from 'react-dom/client';
const logger = createLogger('chatRenderer');
@@ -363,14 +364,16 @@ class ChatRenderer {
childNode.removeChild(childNode.firstChild);
}
const Element = TGUI_CHAT_COMPONENTS[targetName];
+
+ const reactRoot = createRoot(childNode);
+
/* eslint-disable react/no-danger */
- render(
+ reactRoot.render(
,
childNode,
);
- /* eslint-enable react/no-danger */
}
// Highlight text
@@ -400,7 +403,10 @@ class ChatRenderer {
message.node = node;
// Query all possible selectors to find out the message type
if (!message.type) {
- message.type = MESSAGE_TYPE_UNKNOWN;
+ const typeDef = MESSAGE_TYPES.find(
+ (typeDef) => typeDef.selector && node.querySelector(typeDef.selector),
+ );
+ message.type = typeDef?.type || MESSAGE_TYPE_UNKNOWN;
}
updateMessageBadge(message);
if (!countByType[message.type]) {
diff --git a/tgui/packages/tgui-panel/chat/selectors.js b/tgui/packages/tgui-panel/chat/selectors.ts
similarity index 66%
rename from tgui/packages/tgui-panel/chat/selectors.js
rename to tgui/packages/tgui-panel/chat/selectors.ts
index 6352b7cddf0a..b8c1c5a373df 100644
--- a/tgui/packages/tgui-panel/chat/selectors.js
+++ b/tgui/packages/tgui-panel/chat/selectors.ts
@@ -9,9 +9,10 @@ import { map } from 'common/collections';
export const selectChat = (state) => state.chat;
export const selectChatPages = (state) =>
- map((id) => state.chat.pageById[id])(state.chat.pages);
+ map((id: string) => state.chat.pageById[id])(state.chat.pages);
export const selectCurrentChatPage = (state) =>
state.chat.pageById[state.chat.currentPageId];
-export const selectChatPageById = (id) => (state) => state.chat.pageById[id];
+export const selectChatPageById = (id: string) => (state) =>
+ state.chat.pageById[id];
diff --git a/tgui/packages/tgui-panel/index.jsx b/tgui/packages/tgui-panel/index.jsx
index 40bb85984414..e626553727ae 100644
--- a/tgui/packages/tgui-panel/index.jsx
+++ b/tgui/packages/tgui-panel/index.jsx
@@ -14,7 +14,7 @@ import { setupHotReloading } from 'tgui-dev-server/link/client.cjs';
import { setupGlobalEvents } from 'tgui/events';
import { captureExternalLinks } from 'tgui/links';
import { createRenderer } from 'tgui/renderer';
-import { configureStore, StoreProvider } from 'tgui/store';
+import { configureStore } from 'tgui/store';
import { audioMiddleware, audioReducer } from './audio';
import { chatMiddleware, chatReducer } from './chat';
import { gameMiddleware, gameReducer } from './game';
@@ -51,11 +51,7 @@ const renderApp = createRenderer(() => {
setGlobalStore(store);
const { Panel } = require('./Panel');
- return (
-
-
-
- );
+ return ;
});
const setupApp = () => {
diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json
index b627ec7015be..b0c238421dd8 100644
--- a/tgui/packages/tgui-panel/package.json
+++ b/tgui/packages/tgui-panel/package.json
@@ -1,11 +1,14 @@
{
"private": true,
"name": "tgui-panel",
- "version": "4.3.0",
+ "version": "5.0.0",
"dependencies": {
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
"common": "workspace:*",
"dompurify": "^2.3.1",
- "inferno": "^7.4.8",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
diff --git a/tgui/packages/tgui-panel/reconnect.tsx b/tgui/packages/tgui-panel/reconnect.tsx
index c170726a3463..b1c871b325b6 100644
--- a/tgui/packages/tgui-panel/reconnect.tsx
+++ b/tgui/packages/tgui-panel/reconnect.tsx
@@ -12,28 +12,27 @@ setInterval(() => {
}, 5000);
export const ReconnectButton = (props) => {
+ if (!url) return null;
return (
- url && (
- <>
- {
- Byond.command('.reconnect');
- }}
- >
- Reconnect
-
+ <>
+ {
+ Byond.command('.reconnect');
+ }}
+ >
+ Reconnect
+
- {
- location.href = `byond://${url}`;
- Byond.command('.quit');
- }}
- >
- Relaunch game
-
- >
- )
+ {
+ location.href = `byond://${url}`;
+ Byond.command('.quit');
+ }}
+ >
+ Relaunch game
+
+ >
);
};
diff --git a/tgui/packages/tgui-polyfill/1-misc.js b/tgui/packages/tgui-polyfill/1-misc.js
index d519ef9e66cc..d10588c32151 100644
--- a/tgui/packages/tgui-polyfill/1-misc.js
+++ b/tgui/packages/tgui-polyfill/1-misc.js
@@ -8,11 +8,6 @@
(function () {
'use strict';
- // Inferno needs Int32Array, and it is not covered by core-js.
- if (!window.Int32Array) {
- window.Int32Array = Array;
- }
-
// ie11 polyfills
!(function () {
// append
diff --git a/tgui/packages/tgui-polyfill/package.json b/tgui/packages/tgui-polyfill/package.json
index c1374c20c64a..eaffa9f7a096 100644
--- a/tgui/packages/tgui-polyfill/package.json
+++ b/tgui/packages/tgui-polyfill/package.json
@@ -1,16 +1,16 @@
{
"private": true,
"name": "tgui-polyfill",
- "version": "4.3.0",
+ "version": "5.0.0",
"scripts": {
"tgui-polyfill:build": "terser 1-misc.js -f ascii_only,comments=false -o ../../public/tgui-polyfill.min.js"
},
"dependencies": {
- "core-js": "^3.16.1",
- "regenerator-runtime": "^0.13.9",
- "unfetch": "^4.2.0"
+ "core-js": "^3.37.1",
+ "regenerator-runtime": "^0.14.1",
+ "unfetch": "^5.0.0"
},
"devDependencies": {
- "terser": "^5.12.1"
+ "terser": "^5.31.0"
}
}
diff --git a/tgui/packages/tgui/components/AnimatedNumber.jsx b/tgui/packages/tgui/components/AnimatedNumber.jsx
index a763becfd405..b67263a02ef3 100644
--- a/tgui/packages/tgui/components/AnimatedNumber.jsx
+++ b/tgui/packages/tgui/components/AnimatedNumber.jsx
@@ -5,7 +5,7 @@
*/
import { clamp, toFixed } from 'common/math';
-import { Component } from 'inferno';
+import { Component } from 'react';
const FPS = 20;
const Q = 0.5;
diff --git a/tgui/packages/tgui/components/Autofocus.tsx b/tgui/packages/tgui/components/Autofocus.tsx
index 28945dd7aa48..3edfed822d01 100644
--- a/tgui/packages/tgui/components/Autofocus.tsx
+++ b/tgui/packages/tgui/components/Autofocus.tsx
@@ -1,6 +1,6 @@
-import { Component, createRef } from 'inferno';
+import { Component, createRef, PropsWithChildren } from 'react';
-export class Autofocus extends Component {
+export class Autofocus extends Component {
ref = createRef();
componentDidMount() {
diff --git a/tgui/packages/tgui/components/Blink.jsx b/tgui/packages/tgui/components/Blink.jsx
index e1cd50dcb549..7d7bb16170a9 100644
--- a/tgui/packages/tgui/components/Blink.jsx
+++ b/tgui/packages/tgui/components/Blink.jsx
@@ -1,11 +1,11 @@
-import { Component } from 'inferno';
+import { Component } from 'react';
const DEFAULT_BLINKING_INTERVAL = 1000;
const DEFAULT_BLINKING_TIME = 1000;
export class Blink extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
hidden: false,
};
diff --git a/tgui/packages/tgui/components/BodyZoneSelector.tsx b/tgui/packages/tgui/components/BodyZoneSelector.tsx
index 234751f271e3..4ddfabba8939 100644
--- a/tgui/packages/tgui/components/BodyZoneSelector.tsx
+++ b/tgui/packages/tgui/components/BodyZoneSelector.tsx
@@ -1,4 +1,4 @@
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { DmIcon } from './DMIcon';
export enum BodyZone {
@@ -114,7 +114,6 @@ export class BodyZoneSelector extends Component<
});
}}
style={{
- '-ms-interpolation-mode': 'nearest-neighbor',
position: 'absolute',
width: `${32 * scale}px`,
height: `${32 * scale}px`,
@@ -126,8 +125,7 @@ export class BodyZoneSelector extends Component<
icon="icons/hud/screen_gen.dmi"
icon_state={selectedZone}
style={{
- '-ms-interpolation-mode': 'nearest-neighbor',
- 'pointer-events': 'none',
+ pointerEvents: 'none',
position: 'absolute',
width: `${32 * scale}px`,
height: `${32 * scale}px`,
@@ -140,9 +138,8 @@ export class BodyZoneSelector extends Component<
icon="icons/hud/screen_gen.dmi"
icon_state={hoverZone}
style={{
- '-ms-interpolation-mode': 'nearest-neighbor',
- opacity: 0.5,
- 'pointer-events': 'none',
+ opacity: '0.5',
+ pointerEvents: 'none',
position: 'absolute',
width: `${32 * scale}px`,
height: `${32 * scale}px`,
diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx
index 39402699c151..e5808277914a 100644
--- a/tgui/packages/tgui/components/Box.tsx
+++ b/tgui/packages/tgui/components/Box.tsx
@@ -4,65 +4,57 @@
* @license MIT
*/
-import { BooleanLike, classes, pureComponentHooks } from 'common/react';
-import { createVNode, InfernoNode, SFC } from 'inferno';
-import { ChildFlags, VNodeFlags } from 'inferno-vnode-flags';
+import { BooleanLike, classes } from 'common/react';
+import {
+ createElement,
+ KeyboardEventHandler,
+ MouseEventHandler,
+ ReactNode,
+ UIEventHandler,
+} from 'react';
+
import { CSS_COLORS } from '../constants';
+import { logger } from '../logging';
+
+type BooleanProps = Partial>;
+type StringProps = Partial<
+ Record
+>;
+
+export type EventHandlers = Partial<{
+ onClick: MouseEventHandler;
+ onContextMenu: MouseEventHandler;
+ onDoubleClick: MouseEventHandler;
+ onKeyDown: KeyboardEventHandler;
+ onKeyUp: KeyboardEventHandler;
+ onMouseDown: MouseEventHandler;
+ onMouseMove: MouseEventHandler;
+ onMouseOver: MouseEventHandler;
+ onMouseUp: MouseEventHandler;
+ onScroll: UIEventHandler;
+}>;
-export interface BoxProps {
- [key: string]: any;
- as?: string;
- className?: string | BooleanLike;
- children?: InfernoNode;
- position?: string | BooleanLike;
- overflow?: string | BooleanLike;
- overflowX?: string | BooleanLike;
- overflowY?: string | BooleanLike;
- top?: string | BooleanLike;
- bottom?: string | BooleanLike;
- left?: string | BooleanLike;
- right?: string | BooleanLike;
- width?: string | BooleanLike;
- minWidth?: string | BooleanLike;
- maxWidth?: string | BooleanLike;
- height?: string | BooleanLike;
- minHeight?: string | BooleanLike;
- maxHeight?: string | BooleanLike;
- fontSize?: string | BooleanLike;
- fontFamily?: string;
- lineHeight?: string | BooleanLike;
- opacity?: number;
- textAlign?: string | BooleanLike;
- verticalAlign?: string | BooleanLike;
- inline?: BooleanLike;
- bold?: BooleanLike;
- italic?: BooleanLike;
- nowrap?: BooleanLike;
- preserveWhitespace?: BooleanLike;
- m?: string | BooleanLike;
- mx?: string | BooleanLike;
- my?: string | BooleanLike;
- mt?: string | BooleanLike;
- mb?: string | BooleanLike;
- ml?: string | BooleanLike;
- mr?: string | BooleanLike;
- p?: string | BooleanLike;
- px?: string | BooleanLike;
- py?: string | BooleanLike;
- pt?: string | BooleanLike;
- pb?: string | BooleanLike;
- pl?: string | BooleanLike;
- pr?: string | BooleanLike;
- color?: string | BooleanLike;
- textColor?: string | BooleanLike;
- backgroundColor?: string | BooleanLike;
- fillPositionedParent?: boolean;
-}
+export type BoxProps = Partial<{
+ as: string;
+ children: ReactNode;
+ className: string | BooleanLike;
+ style: Partial;
+}> &
+ BooleanProps &
+ StringProps &
+ EventHandlers;
+
+// Don't you dare put this elsewhere
+type DangerDoNotUse = {
+ dangerouslySetInnerHTML?: {
+ __html: any;
+ };
+};
/**
* Coverts our rem-like spacing unit into a CSS unit.
*/
-export const unit = (value: unknown): string | undefined => {
+export const unit = (value: unknown) => {
if (typeof value === 'string') {
// Transparently convert pixels into rem units
if (value.endsWith('px')) {
@@ -78,7 +70,7 @@ export const unit = (value: unknown): string | undefined => {
/**
* Same as `unit`, but half the size for integers numbers.
*/
-export const halfUnit = (value: unknown): string | undefined => {
+export const halfUnit = (value: unknown) => {
if (typeof value === 'string') {
return unit(value);
}
@@ -90,7 +82,7 @@ export const halfUnit = (value: unknown): string | undefined => {
const isColorCode = (str: unknown) => !isColorClass(str);
const isColorClass = (str: unknown): boolean => {
- return typeof str === 'string' && CSS_COLORS.includes(str);
+ return typeof str === 'string' && CSS_COLORS.includes(str as any);
};
const mapRawPropTo = (attrName) => (style, value) => {
@@ -125,71 +117,72 @@ const mapColorPropTo = (attrName) => (style, value) => {
}
};
-const styleMapperByPropName = {
- // Direct mapping
- position: mapRawPropTo('position'),
- overflow: mapRawPropTo('overflow'),
- overflowX: mapRawPropTo('overflow-x'),
- overflowY: mapRawPropTo('overflow-y'),
- top: mapUnitPropTo('top', unit),
+// String / number props
+const stringStyleMap = {
+ align: mapRawPropTo('textAlign'),
bottom: mapUnitPropTo('bottom', unit),
+ fontFamily: mapRawPropTo('fontFamily'),
+ fontSize: mapUnitPropTo('fontSize', unit),
+ fontWeight: mapRawPropTo('fontWeight'),
+ height: mapUnitPropTo('height', unit),
left: mapUnitPropTo('left', unit),
+ maxHeight: mapUnitPropTo('maxHeight', unit),
+ maxWidth: mapUnitPropTo('maxWidth', unit),
+ minHeight: mapUnitPropTo('minHeight', unit),
+ minWidth: mapUnitPropTo('minWidth', unit),
+ opacity: mapRawPropTo('opacity'),
+ overflow: mapRawPropTo('overflow'),
+ overflowX: mapRawPropTo('overflowX'),
+ overflowY: mapRawPropTo('overflowY'),
+ position: mapRawPropTo('position'),
right: mapUnitPropTo('right', unit),
+ textAlign: mapRawPropTo('textAlign'),
+ top: mapUnitPropTo('top', unit),
+ verticalAlign: mapRawPropTo('verticalAlign'),
width: mapUnitPropTo('width', unit),
- minWidth: mapUnitPropTo('min-width', unit),
- maxWidth: mapUnitPropTo('max-width', unit),
- height: mapUnitPropTo('height', unit),
- minHeight: mapUnitPropTo('min-height', unit),
- maxHeight: mapUnitPropTo('max-height', unit),
- fontSize: mapUnitPropTo('font-size', unit),
- fontFamily: mapRawPropTo('font-family'),
+
lineHeight: (style, value) => {
if (typeof value === 'number') {
- style['line-height'] = value;
+ style['lineHeight'] = value;
} else if (typeof value === 'string') {
- style['line-height'] = unit(value);
+ style['lineHeight'] = unit(value);
}
},
- opacity: mapRawPropTo('opacity'),
- textAlign: mapRawPropTo('text-align'),
- verticalAlign: mapRawPropTo('vertical-align'),
- // Boolean props
- inline: mapBooleanPropTo('display', 'inline-block'),
- bold: mapBooleanPropTo('font-weight', 'bold'),
- italic: mapBooleanPropTo('font-style', 'italic'),
- nowrap: mapBooleanPropTo('white-space', 'nowrap'),
- preserveWhitespace: mapBooleanPropTo('white-space', 'pre-wrap'),
- // Margins
+ // Margin
m: mapDirectionalUnitPropTo('margin', halfUnit, [
- 'top',
- 'bottom',
- 'left',
- 'right',
+ 'Top',
+ 'Bottom',
+ 'Left',
+ 'Right',
]),
- mx: mapDirectionalUnitPropTo('margin', halfUnit, ['left', 'right']),
- my: mapDirectionalUnitPropTo('margin', halfUnit, ['top', 'bottom']),
- mt: mapUnitPropTo('margin-top', halfUnit),
- mb: mapUnitPropTo('margin-bottom', halfUnit),
- ml: mapUnitPropTo('margin-left', halfUnit),
- mr: mapUnitPropTo('margin-right', halfUnit),
- // Margins
+ mb: mapUnitPropTo('marginBottom', halfUnit),
+ ml: mapUnitPropTo('marginLeft', halfUnit),
+ mr: mapUnitPropTo('marginRight', halfUnit),
+ mt: mapUnitPropTo('marginTop', halfUnit),
+ mx: mapDirectionalUnitPropTo('margin', halfUnit, ['Left', 'Right']),
+ my: mapDirectionalUnitPropTo('margin', halfUnit, ['Top', 'Bottom']),
+ // Padding
p: mapDirectionalUnitPropTo('padding', halfUnit, [
- 'top',
- 'bottom',
- 'left',
- 'right',
+ 'Top',
+ 'Bottom',
+ 'Left',
+ 'Right',
]),
- px: mapDirectionalUnitPropTo('padding', halfUnit, ['left', 'right']),
- py: mapDirectionalUnitPropTo('padding', halfUnit, ['top', 'bottom']),
- pt: mapUnitPropTo('padding-top', halfUnit),
- pb: mapUnitPropTo('padding-bottom', halfUnit),
- pl: mapUnitPropTo('padding-left', halfUnit),
- pr: mapUnitPropTo('padding-right', halfUnit),
+ pb: mapUnitPropTo('paddingBottom', halfUnit),
+ pl: mapUnitPropTo('paddingLeft', halfUnit),
+ pr: mapUnitPropTo('paddingRight', halfUnit),
+ pt: mapUnitPropTo('paddingTop', halfUnit),
+ px: mapDirectionalUnitPropTo('padding', halfUnit, ['Left', 'Right']),
+ py: mapDirectionalUnitPropTo('padding', halfUnit, ['Top', 'Bottom']),
// Color props
color: mapColorPropTo('color'),
textColor: mapColorPropTo('color'),
- backgroundColor: mapColorPropTo('background-color'),
- // Utility props
+ backgroundColor: mapColorPropTo('backgroundColor'),
+} as const;
+
+// Boolean props
+const booleanStyleMap = {
+ bold: mapBooleanPropTo('fontWeight', 'bold'),
fillPositionedParent: (style, value) => {
if (value) {
style['position'] = 'absolute';
@@ -199,11 +192,16 @@ const styleMapperByPropName = {
style['right'] = 0;
}
},
-};
+ inline: mapBooleanPropTo('display', 'inline-block'),
+ italic: mapBooleanPropTo('fontStyle', 'italic'),
+ nowrap: mapBooleanPropTo('whiteSpace', 'nowrap'),
+ preserveWhitespace: mapBooleanPropTo('whiteSpace', 'pre-wrap'),
+} as const;
+
+export const computeBoxProps = (props) => {
+ const computedProps: Record = {};
+ const computedStyles: Record = {};
-export const computeBoxProps = (props: BoxProps) => {
- const computedProps: HTMLAttributes = {};
- const computedStyles = {};
// Compute props
for (let propName of Object.keys(props)) {
if (propName === 'style') {
@@ -211,28 +209,20 @@ export const computeBoxProps = (props: BoxProps) => {
}
const propValue = props[propName];
- const mapPropToStyle = styleMapperByPropName[propName];
+
+ const mapPropToStyle =
+ stringStyleMap[propName] || booleanStyleMap[propName];
+
if (mapPropToStyle) {
mapPropToStyle(computedStyles, propValue);
} else {
computedProps[propName] = propValue;
}
}
- // Concatenate styles
- let style = '';
- for (let attrName of Object.keys(computedStyles)) {
- const attrValue = computedStyles[attrName];
- style += attrName + ':' + attrValue + ';';
- }
- if (props.style) {
- for (let attrName of Object.keys(props.style)) {
- const attrValue = props.style[attrName];
- style += attrName + ':' + attrValue + ';';
- }
- }
- if (style.length > 0) {
- computedProps.style = style;
- }
+
+ // Merge computed styles and any directly provided styles
+ computedProps.style = { ...computedStyles, ...props.style };
+
return computedProps;
};
@@ -245,27 +235,28 @@ export const computeBoxClassName = (props: BoxProps) => {
]);
};
-export const Box: SFC = (props: BoxProps) => {
+export const Box = (props: BoxProps & DangerDoNotUse) => {
const { as = 'div', className, children, ...rest } = props;
- // Render props
- if (typeof children === 'function') {
- return children(computeBoxProps(props));
- }
- const computedClassName =
- typeof className === 'string'
- ? className + ' ' + computeBoxClassName(rest)
- : computeBoxClassName(rest);
+
+ // Compute class name and styles
+ const computedClassName = className
+ ? `${className} ${computeBoxClassName(rest)}`
+ : computeBoxClassName(rest);
const computedProps = computeBoxProps(rest);
- // Render a wrapper element
- return createVNode(
- VNodeFlags.HtmlElement,
- as,
- computedClassName,
+
+ if (as === 'img') {
+ logger.error(
+ 'Box component cannot be used as an image. Use Image component instead.',
+ );
+ }
+
+ // Render the component
+ return createElement(
+ typeof as === 'string' ? as : 'div',
+ {
+ ...computedProps,
+ className: computedClassName,
+ },
children,
- ChildFlags.UnknownChildren,
- computedProps,
- undefined,
);
};
-
-Box.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/components/Button.jsx b/tgui/packages/tgui/components/Button.jsx
index 6142e5c567cb..ecf74129e2cc 100644
--- a/tgui/packages/tgui/components/Button.jsx
+++ b/tgui/packages/tgui/components/Button.jsx
@@ -5,8 +5,8 @@
*/
import { KEY_ENTER, KEY_ESCAPE, KEY_SPACE } from 'common/keycodes';
-import { classes, pureComponentHooks } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { classes } from 'common/react';
+import { Component, createRef } from 'react';
import { createLogger } from '../logging';
import { Box, computeBoxClassName, computeBoxProps } from './Box';
import { Icon } from './Icon';
@@ -39,15 +39,7 @@ export const Button = (props) => {
...rest
} = props;
const hasContent = !!(content || children);
- // A warning about the lowercase onclick
- if (onclick) {
- logger.warn(
- `Lowercase 'onclick' is not supported on Button and lowercase` +
- ` prop names are discouraged in general. Please use a camelCase` +
- `'onClick' instead and read: ` +
- `https://infernojs.org/docs/guides/event-handling`,
- );
- }
+
rest.onClick = (e) => {
if (!disabled && onClick) {
onClick(e);
@@ -132,8 +124,6 @@ export const Button = (props) => {
return buttonContent;
};
-Button.defaultHooks = pureComponentHooks;
-
export const ButtonCheckbox = (props) => {
const { checked, ...rest } = props;
return (
@@ -149,8 +139,8 @@ export const ButtonCheckbox = (props) => {
Button.Checkbox = ButtonCheckbox;
export class ButtonConfirm extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
clickedOnce: false,
};
@@ -200,8 +190,8 @@ export class ButtonConfirm extends Component {
Button.Confirm = ButtonConfirm;
export class ButtonInput extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.inputRef = createRef();
this.state = {
inInput: false,
@@ -272,7 +262,7 @@ export class ButtonInput extends Component {
className="NumberInput__input"
style={{
display: !this.state.inInput ? 'none' : undefined,
- 'text-align': 'left',
+ textAlign: 'left',
}}
onBlur={(e) => {
if (!this.state.inInput) {
diff --git a/tgui/packages/tgui/components/ByondUi.jsx b/tgui/packages/tgui/components/ByondUi.jsx
index a0ad921802f2..2e751645e57d 100644
--- a/tgui/packages/tgui/components/ByondUi.jsx
+++ b/tgui/packages/tgui/components/ByondUi.jsx
@@ -6,7 +6,7 @@
import { shallowDiffers } from 'common/react';
import { debounce } from 'common/timer';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { createLogger } from '../logging';
import { computeBoxProps } from './Box';
@@ -115,7 +115,7 @@ export class ByondUi extends Component {
return (
);
}
diff --git a/tgui/packages/tgui/components/Chart.jsx b/tgui/packages/tgui/components/Chart.jsx
index 6bfa1445e084..1e856135c659 100644
--- a/tgui/packages/tgui/components/Chart.jsx
+++ b/tgui/packages/tgui/components/Chart.jsx
@@ -5,8 +5,7 @@
*/
import { map, zipWith } from 'common/collections';
-import { pureComponentHooks } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { Box } from './Box';
const normalizeData = (data, scale, rangeX, rangeY) => {
@@ -50,6 +49,7 @@ class LineChart extends Component {
};
this.handleResize = () => {
const element = this.ref.current;
+ if (!element) return;
this.setState({
viewBox: [element.offsetWidth, element.offsetHeight],
});
@@ -118,8 +118,6 @@ class LineChart extends Component {
}
}
-LineChart.defaultHooks = pureComponentHooks;
-
export const Chart = {
Line: LineChart,
};
diff --git a/tgui/packages/tgui/components/Collapsible.jsx b/tgui/packages/tgui/components/Collapsible.jsx
index 7d59a11417cc..9fda360b0aa0 100644
--- a/tgui/packages/tgui/components/Collapsible.jsx
+++ b/tgui/packages/tgui/components/Collapsible.jsx
@@ -4,7 +4,7 @@
* @license MIT
*/
-import { Component } from 'inferno';
+import { Component } from 'react';
import { Box } from './Box';
import { Button } from './Button';
diff --git a/tgui/packages/tgui/components/ColorBox.jsx b/tgui/packages/tgui/components/ColorBox.jsx
index b78b216b5000..045fae311a9d 100644
--- a/tgui/packages/tgui/components/ColorBox.jsx
+++ b/tgui/packages/tgui/components/ColorBox.jsx
@@ -4,7 +4,7 @@
* @license MIT
*/
-import { classes, pureComponentHooks } from 'common/react';
+import { classes } from 'common/react';
import { computeBoxClassName, computeBoxProps } from './Box';
export const ColorBox = (props) => {
@@ -21,5 +21,3 @@ export const ColorBox = (props) => {
);
};
-
-ColorBox.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/components/DMIcon.tsx b/tgui/packages/tgui/components/DMIcon.tsx
index 1e07bb530609..c3471beb0d4e 100644
--- a/tgui/packages/tgui/components/DMIcon.tsx
+++ b/tgui/packages/tgui/components/DMIcon.tsx
@@ -1,4 +1,4 @@
-import { Component, InfernoNode } from 'inferno';
+import { Component, ReactNode } from 'react';
import { logger } from '../logging';
import { resolveAsset } from '../assets';
@@ -26,7 +26,7 @@ type Props = {
/** Facing direction. See direction enum. Default is South */
direction: Direction;
/** Fallback icon. */
- fallback: InfernoNode;
+ fallback: ReactNode;
/** Frame number. Default is 1 */
frame: number;
/** Movement state. Default is false */
@@ -45,6 +45,10 @@ export class DmIcon extends Component {
iconRef: '',
};
+ constructor(props) {
+ super(props);
+ }
+
componentDidMount() {
this.fetchRefMap();
}
diff --git a/tgui/packages/tgui/components/DraggableControl.jsx b/tgui/packages/tgui/components/DraggableControl.jsx
index 691a9b78cae1..c02c73444f26 100644
--- a/tgui/packages/tgui/components/DraggableControl.jsx
+++ b/tgui/packages/tgui/components/DraggableControl.jsx
@@ -5,8 +5,7 @@
*/
import { clamp } from 'common/math';
-import { pureComponentHooks } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { AnimatedNumber } from './AnimatedNumber';
const DEFAULT_UPDATE_RATE = 400;
@@ -189,8 +188,8 @@ export class DraggableControl extends Component {
style={{
display: !editing ? 'none' : undefined,
height: height,
- 'line-height': lineHeight,
- 'font-size': fontSize,
+ lineHeight: lineHeight,
+ fontSize: fontSize,
}}
onBlur={(e) => {
if (!editing) {
@@ -269,7 +268,6 @@ export class DraggableControl extends Component {
}
}
-DraggableControl.defaultHooks = pureComponentHooks;
DraggableControl.defaultProps = {
minValue: -Infinity,
maxValue: +Infinity,
diff --git a/tgui/packages/tgui/components/Dropdown.jsx b/tgui/packages/tgui/components/Dropdown.jsx
index a9ca84b48498..1bfe83568d9d 100644
--- a/tgui/packages/tgui/components/Dropdown.jsx
+++ b/tgui/packages/tgui/components/Dropdown.jsx
@@ -5,7 +5,7 @@
*/
import { classes } from 'common/react';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { Box } from './Box';
import { Icon } from './Icon';
@@ -31,7 +31,7 @@ export class Dropdown extends Component {
this.setState({ open: open });
if (open) {
setTimeout(() => window.addEventListener('click', this.handleClick));
- this.menuRef.focus();
+ this.menuRef?.focus();
} else {
window.removeEventListener('click', this.handleClick);
}
diff --git a/tgui/packages/tgui/components/FitText.tsx b/tgui/packages/tgui/components/FitText.tsx
index 707002e46aa9..1d70096ac136 100644
--- a/tgui/packages/tgui/components/FitText.tsx
+++ b/tgui/packages/tgui/components/FitText.tsx
@@ -1,4 +1,10 @@
-import { Component, createRef, RefObject } from 'inferno';
+import {
+ Component,
+ createRef,
+ HTMLAttributes,
+ ReactNode,
+ RefObject,
+} from 'react';
const DEFAULT_ACCEPTABLE_DIFFERENCE = 5;
@@ -8,6 +14,7 @@ export class FitText extends Component<
maxWidth: number;
maxFontSize: number;
native?: HTMLAttributes;
+ children: ReactNode;
},
{
fontSize: number;
@@ -18,8 +25,8 @@ export class FitText extends Component<
fontSize: 0,
};
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.resize = this.resize.bind(this);
@@ -79,7 +86,7 @@ export class FitText extends Component<
{
@@ -28,10 +29,10 @@ export const computeFlexProps = (props: FlexProps) => {
return computeBoxProps({
style: {
...rest.style,
- 'flex-direction': direction,
- 'flex-wrap': wrap === true ? 'wrap' : wrap,
- 'align-items': align,
- 'justify-content': justify,
+ flexDirection: direction,
+ flexWrap: wrap === true ? 'wrap' : wrap,
+ alignItems: align,
+ justifyContent: justify,
},
...rest,
});
@@ -47,12 +48,10 @@ export const Flex = (props) => {
);
};
-Flex.defaultHooks = pureComponentHooks;
-
export type FlexItemProps = BoxProps & {
- grow?: number;
+ grow?: number | true;
order?: number;
- shrink?: number;
+ shrink?: number | true;
basis?: string | BooleanLike;
align?: string | BooleanLike;
};
@@ -75,11 +74,11 @@ export const computeFlexItemProps = (props: FlexItemProps) => {
return computeBoxProps({
style: {
...style,
- 'flex-grow': grow !== undefined && Number(grow),
- 'flex-shrink': shrink !== undefined && Number(shrink),
- 'flex-basis': unit(computedBasis),
+ flexGrow: grow !== undefined && Number(grow),
+ flexShrink: shrink !== undefined && Number(shrink),
+ flexBasis: unit(computedBasis),
order: order,
- 'align-self': align,
+ alignSelf: align,
},
...rest,
});
@@ -95,6 +94,4 @@ const FlexItem = (props) => {
);
};
-FlexItem.defaultHooks = pureComponentHooks;
-
Flex.Item = FlexItem;
diff --git a/tgui/packages/tgui/components/Grid.jsx b/tgui/packages/tgui/components/Grid.jsx
index 7ad3fd1dfdbf..f5593c9e00a5 100644
--- a/tgui/packages/tgui/components/Grid.jsx
+++ b/tgui/packages/tgui/components/Grid.jsx
@@ -5,7 +5,6 @@
*/
import { Table } from './Table';
-import { pureComponentHooks } from 'common/react';
/** @deprecated */
export const Grid = (props) => {
@@ -17,8 +16,6 @@ export const Grid = (props) => {
);
};
-Grid.defaultHooks = pureComponentHooks;
-
/** @deprecated */
export const GridColumn = (props) => {
const { size = 1, style, ...rest } = props;
@@ -33,6 +30,4 @@ export const GridColumn = (props) => {
);
};
-Grid.defaultHooks = pureComponentHooks;
-
Grid.Column = GridColumn;
diff --git a/tgui/packages/tgui/components/Icon.jsx b/tgui/packages/tgui/components/Icon.jsx
index 482f323b7c5c..2798615c332c 100644
--- a/tgui/packages/tgui/components/Icon.jsx
+++ b/tgui/packages/tgui/components/Icon.jsx
@@ -6,7 +6,7 @@
* @license MIT
*/
-import { classes, pureComponentHooks } from 'common/react';
+import { classes } from 'common/react';
import { computeBoxClassName, computeBoxProps } from './Box';
const FA_OUTLINE_REGEX = /-o$/;
@@ -18,7 +18,7 @@ export const Icon = (props) => {
if (!rest.style) {
rest.style = {};
}
- rest.style['font-size'] = size * 100 + '%';
+ rest.style['fontSize'] = size * 100 + '%';
}
if (typeof rotation === 'number') {
if (!rest.style) {
@@ -53,8 +53,6 @@ export const Icon = (props) => {
);
};
-Icon.defaultHooks = pureComponentHooks;
-
export const IconStack = (props) => {
const { className, children, ...rest } = props;
return (
diff --git a/tgui/packages/tgui/components/Image.tsx b/tgui/packages/tgui/components/Image.tsx
index 493195ab8a9e..0900f3f63dab 100644
--- a/tgui/packages/tgui/components/Image.tsx
+++ b/tgui/packages/tgui/components/Image.tsx
@@ -1,4 +1,4 @@
-import { Component } from 'inferno';
+import { Component } from 'react';
import { BoxProps, computeBoxProps } from './Box';
@@ -52,7 +52,7 @@ export class Image extends Component {
return (
{
+ onError={(event) => {
if (fixErrors && this.attempts < maxAttempts) {
const imgElement = event.currentTarget;
diff --git a/tgui/packages/tgui/components/InfinitePlane.jsx b/tgui/packages/tgui/components/InfinitePlane.jsx
index ad87d01ffe33..3f2bf598c234 100644
--- a/tgui/packages/tgui/components/InfinitePlane.jsx
+++ b/tgui/packages/tgui/components/InfinitePlane.jsx
@@ -2,7 +2,7 @@ import { computeBoxProps } from './Box';
import { Stack } from './Stack';
import { ProgressBar } from './ProgressBar';
import { Button } from './Button';
-import { Component } from 'inferno';
+import { Component } from 'react';
const ZOOM_MIN_VAL = 0.5;
const ZOOM_MAX_VAL = 1.5;
@@ -10,8 +10,8 @@ const ZOOM_MAX_VAL = 1.5;
const ZOOM_INCREMENT = 0.1;
export class InfinitePlane extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
mouseDown: false,
@@ -148,10 +148,10 @@ export class InfinitePlane extends Component {
position: 'fixed',
height: '100%',
width: '100%',
- 'background-image': `url("${backgroundImage}")`,
- 'background-position': `${finalLeft}px ${finalTop}px`,
- 'background-repeat': 'repeat',
- 'background-size': `${zoom * imageWidth}px`,
+ backgroundImage: `url("${backgroundImage}")`,
+ backgroundPosition: `${finalLeft}px ${finalTop}px`,
+ backgroundRepeat: 'repeat',
+ backgroundSize: `${zoom * imageWidth}px`,
}}
/>
typeof value !== 'number' && typeof value !== 'string' ? '' : String(value);
export class Input extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.inputRef = createRef();
this.state = {
editing: false,
diff --git a/tgui/packages/tgui/components/KeyListener.tsx b/tgui/packages/tgui/components/KeyListener.tsx
index 62509cae96d6..d401642a3cff 100644
--- a/tgui/packages/tgui/components/KeyListener.tsx
+++ b/tgui/packages/tgui/components/KeyListener.tsx
@@ -1,4 +1,4 @@
-import { Component } from 'inferno';
+import { Component } from 'react';
import { KeyEvent } from '../events';
import { listenForKeyEvents } from '../hotkeys';
@@ -11,8 +11,8 @@ type KeyListenerProps = Partial<{
export class KeyListener extends Component
{
dispose: () => void;
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.dispose = listenForKeyEvents((key) => {
if (this.props.onKey) {
diff --git a/tgui/packages/tgui/components/Knob.jsx b/tgui/packages/tgui/components/Knob.jsx
index 60370e141910..5702c16129a1 100644
--- a/tgui/packages/tgui/components/Knob.jsx
+++ b/tgui/packages/tgui/components/Knob.jsx
@@ -83,7 +83,7 @@ export const Knob = (props) => {
])}
{...computeBoxProps({
style: {
- 'font-size': size + 'em',
+ fontSize: size + 'em',
...style,
},
...rest,
@@ -116,7 +116,7 @@ export const Knob = (props) => {
{
return ;
};
-LabeledList.defaultHooks = pureComponentHooks;
-
type LabeledListItemProps = {
className?: string | BooleanLike;
- label?: string | InfernoNode | BooleanLike;
+ label?: string | ReactNode | BooleanLike;
labelColor?: string | BooleanLike;
color?: string | BooleanLike;
textAlign?: string | BooleanLike;
- buttons?: InfernoNode;
+ buttons?: ReactNode;
/** @deprecated */
content?: any;
- children?: InfernoNode;
+ children?: ReactNode;
verticalAlign?: string;
};
@@ -60,6 +58,7 @@ const LabeledListItem = (props: LabeledListItemProps) => {
color={color}
textAlign={textAlign}
className={classes(['LabeledList__cell', 'LabeledList__content'])}
+ // @ts-ignore
colSpan={buttons ? undefined : 2}
verticalAlign={verticalAlign}
>
@@ -73,8 +72,6 @@ const LabeledListItem = (props: LabeledListItemProps) => {
);
};
-LabeledListItem.defaultHooks = pureComponentHooks;
-
type LabeledListDividerProps = {
size?: number;
};
@@ -86,8 +83,8 @@ const LabeledListDivider = (props: LabeledListDividerProps) => {
@@ -96,7 +93,5 @@ const LabeledListDivider = (props: LabeledListDividerProps) => {
);
};
-LabeledListDivider.defaultHooks = pureComponentHooks;
-
LabeledList.Item = LabeledListItem;
LabeledList.Divider = LabeledListDivider;
diff --git a/tgui/packages/tgui/components/NoticeBox.jsx b/tgui/packages/tgui/components/NoticeBox.jsx
index 1c3b49b16a53..09e205b46bef 100644
--- a/tgui/packages/tgui/components/NoticeBox.jsx
+++ b/tgui/packages/tgui/components/NoticeBox.jsx
@@ -4,7 +4,7 @@
* @license MIT
*/
-import { classes, pureComponentHooks } from 'common/react';
+import { classes } from 'common/react';
import { Box } from './Box';
export const NoticeBox = (props) => {
@@ -23,5 +23,3 @@ export const NoticeBox = (props) => {
/>
);
};
-
-NoticeBox.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/components/NumberInput.jsx b/tgui/packages/tgui/components/NumberInput.jsx
index 331764c476f6..20b50c733ec2 100644
--- a/tgui/packages/tgui/components/NumberInput.jsx
+++ b/tgui/packages/tgui/components/NumberInput.jsx
@@ -5,8 +5,8 @@
*/
import { clamp } from 'common/math';
-import { classes, pureComponentHooks } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { classes } from 'common/react';
+import { Component, createRef } from 'react';
import { AnimatedNumber } from './AnimatedNumber';
import { Box } from './Box';
@@ -209,8 +209,8 @@ export class NumberInput extends Component {
style={{
display: !editing ? 'none' : undefined,
height: height,
- 'line-height': lineHeight,
- 'font-size': fontSize,
+ lineHeight: lineHeight,
+ fontSize: fontSize,
}}
onBlur={(e) => {
if (!editing) {
@@ -274,7 +274,6 @@ export class NumberInput extends Component {
}
}
-NumberInput.defaultHooks = pureComponentHooks;
NumberInput.defaultProps = {
minValue: -Infinity,
maxValue: +Infinity,
diff --git a/tgui/packages/tgui/components/Popper.tsx b/tgui/packages/tgui/components/Popper.tsx
index 95a0c9490a43..a11905b3cccc 100644
--- a/tgui/packages/tgui/components/Popper.tsx
+++ b/tgui/packages/tgui/components/Popper.tsx
@@ -1,12 +1,20 @@
import { createPopper } from '@popperjs/core';
import { ArgumentsOf } from 'common/types';
-import { Component, findDOMfromVNode, InfernoNode, render } from 'inferno';
+import {
+ Component,
+ CSSProperties,
+ JSXElementConstructor,
+ PropsWithChildren,
+ ReactElement,
+} from 'react';
+// eslint-disable-next-line react/no-deprecated
+import { findDOMNode, render } from 'react-dom';
type PopperProps = {
- popperContent: InfernoNode;
+ popperContent: ReactElement> | false;
options?: ArgumentsOf[2];
additionalStyles?: CSSProperties;
-};
+} & PropsWithChildren;
export class Popper extends Component {
static id: number = 0;
@@ -14,8 +22,8 @@ export class Popper extends Component {
renderedContent: HTMLDivElement;
popperInstance: ReturnType;
- constructor() {
- super();
+ constructor(props) {
+ super(props);
Popper.id += 1;
}
@@ -35,15 +43,16 @@ export class Popper extends Component {
document.body.appendChild(this.renderedContent);
// HACK: We don't want to create a wrapper, as it could break the layout
- // of consumers, so we do the inferno equivalent of `findDOMNode(this)`.
+ // of consumers, so we use findDOMNode.
// This is usually bad as refs are usually better, but refs did
// not work in this case, as they weren't propagating correctly.
// A previous attempt was made as a render prop that passed an ID,
// but this made consuming use too unwieldly.
- // This code is copied from `findDOMNode` in inferno-extras.
// Because this component is written in TypeScript, we will know
// immediately if this internal variable is removed.
- const domNode = findDOMfromVNode(this.$LI, true);
+ //
+ // eslint-disable-next-line react/no-find-dom-node
+ const domNode = findDOMNode(this) as Element;
if (!domNode) {
return;
}
@@ -62,7 +71,7 @@ export class Popper extends Component {
componentWillUnmount() {
this.popperInstance?.destroy();
- render(null, this.renderedContent, () => {
+ render(<> >, this.renderedContent, () => {
this.renderedContent.remove();
});
}
@@ -70,7 +79,7 @@ export class Popper extends Component {
renderPopperContent(callback: () => void) {
// `render` errors when given false, so we convert it to `null`,
// which is supported.
- render(this.props.popperContent || null, this.renderedContent, callback);
+ render(this.props.popperContent || <> >, this.renderedContent, callback);
}
render() {
diff --git a/tgui/packages/tgui/components/ProgressBar.jsx b/tgui/packages/tgui/components/ProgressBar.jsx
index affa05d84d8c..a2cbd596cd14 100644
--- a/tgui/packages/tgui/components/ProgressBar.jsx
+++ b/tgui/packages/tgui/components/ProgressBar.jsx
@@ -5,7 +5,7 @@
*/
import { clamp01, scale, keyOfMatchingRange, toFixed } from 'common/math';
-import { classes, pureComponentHooks } from 'common/react';
+import { classes } from 'common/react';
import { computeBoxClassName, computeBoxProps } from './Box';
import { CSS_COLORS } from '../constants';
@@ -38,8 +38,8 @@ export const ProgressBar = (props) => {
} else {
// Otherwise, set styles directly.
outerProps.style =
- (outerProps.style || '') + `border-color: ${effectiveColor};`;
- fillStyles['background-color'] = effectiveColor;
+ (outerProps.style || '') + `borderClor: ${effectiveColor};`;
+ fillStyles['backgroundColor'] = effectiveColor;
}
return (
@@ -54,5 +54,3 @@ export const ProgressBar = (props) => {
);
};
-
-ProgressBar.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/components/RestrictedInput.jsx b/tgui/packages/tgui/components/RestrictedInput.jsx
index d6f17d16b3a3..a53471e1e549 100644
--- a/tgui/packages/tgui/components/RestrictedInput.jsx
+++ b/tgui/packages/tgui/components/RestrictedInput.jsx
@@ -1,6 +1,6 @@
import { classes } from 'common/react';
import { clamp } from 'common/math';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { Box } from './Box';
import { KEY_ESCAPE, KEY_ENTER } from 'common/keycodes';
@@ -27,8 +27,8 @@ const getClampedNumber = (value, minValue, maxValue) => {
};
export class RestrictedInput extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.inputRef = createRef();
this.state = {
editing: false,
diff --git a/tgui/packages/tgui/components/RoundGauge.jsx b/tgui/packages/tgui/components/RoundGauge.jsx
index 1c6b1b0ed9f8..92de363f060d 100644
--- a/tgui/packages/tgui/components/RoundGauge.jsx
+++ b/tgui/packages/tgui/components/RoundGauge.jsx
@@ -67,7 +67,7 @@ export const RoundGauge = (props) => {
])}
{...computeBoxProps({
style: {
- 'font-size': size + 'em',
+ fontSize: size + 'em',
...style,
},
...rest,
@@ -95,7 +95,7 @@ export const RoundGauge = (props) => {
className={`RoundGauge__ringFill RoundGauge--color--${x}`}
key={i}
style={{
- 'stroke-dashoffset': Math.max(
+ strokeDashoffset: Math.max(
(2.0 - (col_ranges[1] - col_ranges[0])) * Math.PI * 50,
0,
),
diff --git a/tgui/packages/tgui/components/Section.tsx b/tgui/packages/tgui/components/Section.tsx
index c2a670b447e0..707a745088f7 100644
--- a/tgui/packages/tgui/components/Section.tsx
+++ b/tgui/packages/tgui/components/Section.tsx
@@ -5,14 +5,14 @@
*/
import { canRender, classes } from 'common/react';
-import { Component, createRef, InfernoNode, RefObject } from 'inferno';
+import { Component, createRef, ReactNode, RefObject } from 'react';
import { addScrollableNode, removeScrollableNode } from '../events';
import { BoxProps, computeBoxClassName, computeBoxProps } from './Box';
interface SectionProps extends BoxProps {
className?: string;
- title?: InfernoNode;
- buttons?: InfernoNode;
+ title?: ReactNode;
+ buttons?: ReactNode;
fill?: boolean;
fitted?: boolean;
scrollable?: boolean;
diff --git a/tgui/packages/tgui/components/Stack.tsx b/tgui/packages/tgui/components/Stack.tsx
index 49b8a1539b5d..74e1bf8309cb 100644
--- a/tgui/packages/tgui/components/Stack.tsx
+++ b/tgui/packages/tgui/components/Stack.tsx
@@ -5,7 +5,7 @@
*/
import { classes } from 'common/react';
-import { RefObject } from 'inferno';
+import { RefObject } from 'react';
import {
computeFlexClassName,
computeFlexItemClassName,
@@ -18,6 +18,7 @@ import {
type StackProps = FlexProps & {
vertical?: boolean;
fill?: boolean;
+ zebra?: boolean;
};
export const Stack = (props: StackProps) => {
@@ -40,7 +41,7 @@ export const Stack = (props: StackProps) => {
);
};
-type StackItemProps = FlexProps & {
+type StackItemProps = FlexItemProps & {
innerRef?: RefObject;
};
diff --git a/tgui/packages/tgui/components/Table.jsx b/tgui/packages/tgui/components/Table.jsx
index aae47df427c3..f9a59b36c7ff 100644
--- a/tgui/packages/tgui/components/Table.jsx
+++ b/tgui/packages/tgui/components/Table.jsx
@@ -4,7 +4,7 @@
* @license MIT
*/
-import { classes, pureComponentHooks } from 'common/react';
+import { classes } from 'common/react';
import { computeBoxClassName, computeBoxProps } from './Box';
export const Table = (props) => {
@@ -24,8 +24,6 @@ export const Table = (props) => {
);
};
-Table.defaultHooks = pureComponentHooks;
-
export const TableRow = (props) => {
const { className, header, ...rest } = props;
return (
@@ -41,8 +39,6 @@ export const TableRow = (props) => {
);
};
-TableRow.defaultHooks = pureComponentHooks;
-
export const TableCell = (props) => {
const { className, collapsing, header, ...rest } = props;
return (
@@ -59,7 +55,5 @@ export const TableCell = (props) => {
);
};
-TableCell.defaultHooks = pureComponentHooks;
-
Table.Row = TableRow;
Table.Cell = TableCell;
diff --git a/tgui/packages/tgui/components/TextArea.jsx b/tgui/packages/tgui/components/TextArea.jsx
index b516e0517f16..d24a2e4ce5b4 100644
--- a/tgui/packages/tgui/components/TextArea.jsx
+++ b/tgui/packages/tgui/components/TextArea.jsx
@@ -6,7 +6,7 @@
*/
import { classes } from 'common/react';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { Box } from './Box';
import { toInputValue } from './Input';
import { KEY_ESCAPE } from 'common/keycodes';
diff --git a/tgui/packages/tgui/components/TimeDisplay.jsx b/tgui/packages/tgui/components/TimeDisplay.jsx
index 6b87ee5260ac..bbdd747701cc 100644
--- a/tgui/packages/tgui/components/TimeDisplay.jsx
+++ b/tgui/packages/tgui/components/TimeDisplay.jsx
@@ -1,5 +1,5 @@
import { formatTime } from '../format';
-import { Component } from 'inferno';
+import { Component } from 'react';
// AnimatedNumber Copypaste
const isSafeNumber = (value) => {
diff --git a/tgui/packages/tgui/components/Tooltip.tsx b/tgui/packages/tgui/components/Tooltip.tsx
index 2d8d10a26633..0ab3e8fca93e 100644
--- a/tgui/packages/tgui/components/Tooltip.tsx
+++ b/tgui/packages/tgui/components/Tooltip.tsx
@@ -1,9 +1,11 @@
import { createPopper, Placement, VirtualElement } from '@popperjs/core';
-import { Component, findDOMfromVNode, InfernoNode, render } from 'inferno';
+import { ReactNode, Component } from 'react';
+// eslint-disable-next-line react/no-deprecated
+import { findDOMNode, render } from 'react-dom';
type TooltipProps = {
- children?: InfernoNode;
- content: InfernoNode;
+ children?: ReactNode;
+ content: ReactNode;
position?: Placement;
};
@@ -20,13 +22,16 @@ const DEFAULT_OPTIONS = {
],
};
-const NULL_RECT = {
+const NULL_RECT: DOMRect = {
width: 0,
height: 0,
top: 0,
right: 0,
bottom: 0,
left: 0,
+ x: 0,
+ y: 0,
+ toJSON: () => null,
};
export class Tooltip extends Component {
@@ -44,14 +49,15 @@ export class Tooltip extends Component {
getDOMNode() {
// HACK: We don't want to create a wrapper, as it could break the layout
- // of consumers, so we do the inferno equivalent of `findDOMNode(this)`.
+ // of consumers, so we use findDOMNode.
// My attempt to avoid this was a render prop that passed in
// callbacks to onmouseenter and onmouseleave, but this was unwiedly
// to consumers, specifically buttons.
- // This code is copied from `findDOMNode` in inferno-extras.
// Because this component is written in TypeScript, we will know
// immediately if this internal variable is removed.
- return findDOMfromVNode(this.$LI, true);
+ //
+ // eslint-disable-next-line react/no-find-dom-node
+ return findDOMNode(this) as Element;
}
componentDidMount() {
diff --git a/tgui/packages/tgui/components/TrackOutsideClicks.tsx b/tgui/packages/tgui/components/TrackOutsideClicks.tsx
index 7b3914ecb271..68665a3eb31d 100644
--- a/tgui/packages/tgui/components/TrackOutsideClicks.tsx
+++ b/tgui/packages/tgui/components/TrackOutsideClicks.tsx
@@ -1,12 +1,13 @@
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
export class TrackOutsideClicks extends Component<{
onOutsideClick: () => void;
+ children: React.ReactNode;
}> {
ref = createRef();
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.handleOutsideClick = this.handleOutsideClick.bind(this);
diff --git a/tgui/packages/tgui/index.jsx b/tgui/packages/tgui/index.jsx
index 6686f2424acf..b6cc8a5db2b3 100644
--- a/tgui/packages/tgui/index.jsx
+++ b/tgui/packages/tgui/index.jsx
@@ -28,7 +28,7 @@ import { setupHotReloading } from 'tgui-dev-server/link/client.cjs';
import { setupHotKeys } from './hotkeys';
import { captureExternalLinks } from './links';
import { createRenderer } from './renderer';
-import { configureStore, StoreProvider } from './store';
+import { configureStore } from './store';
import { setupGlobalEvents } from './events';
import { setGlobalStore } from './backend';
@@ -42,11 +42,7 @@ const renderApp = createRenderer(() => {
const { getRoutedComponent } = require('./routes');
const Component = getRoutedComponent(store);
- return (
-
-
-
- );
+ return ;
});
const setupApp = () => {
diff --git a/tgui/packages/tgui/interfaces/Adminhelp.tsx b/tgui/packages/tgui/interfaces/Adminhelp.tsx
index 597c8c535a0e..51ba58ffd75a 100644
--- a/tgui/packages/tgui/interfaces/Adminhelp.tsx
+++ b/tgui/packages/tgui/interfaces/Adminhelp.tsx
@@ -33,7 +33,7 @@ export const Adminhelp = (props) => {
@@ -57,7 +57,7 @@ export const Adminhelp = (props) => {
fontFamily="arial"
backgroundColor="grey"
style={{
- 'font-style': 'normal',
+ fontStyle: 'normal',
}}
>
Input '{confirmationText}' to proceed.
diff --git a/tgui/packages/tgui/interfaces/AirAlarm.jsx b/tgui/packages/tgui/interfaces/AirAlarm.jsx
index 86d26f78213b..583e4fc1bd1b 100644
--- a/tgui/packages/tgui/interfaces/AirAlarm.jsx
+++ b/tgui/packages/tgui/interfaces/AirAlarm.jsx
@@ -1,5 +1,5 @@
import { toFixed } from 'common/math';
-import { Fragment } from 'inferno';
+import { Fragment } from 'react';
import { useBackend, useLocalState } from '../backend';
import {
Box,
diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
index 0fc08ae3a122..6ee574bd4512 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { useBackend, useSharedState } from '../backend';
import { Box, Button, Dimmer, Dropdown, Section, Stack } from '../components';
import { Window } from '../layouts';
@@ -157,7 +156,7 @@ const MemoriesSection = (props) => {
{
const { fluff, objectives, explain_attack } = data;
return (
-
+
diff --git a/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx b/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx
index 82850130fbe9..09c87b444bd8 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoGangmember.tsx
@@ -16,7 +16,7 @@ export const AntagInfoGangmember = (props) => {
diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
index 01dd1b6587b3..605028e600af 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
@@ -307,9 +307,7 @@ export const AntagInfoHeretic = (props) => {
{
mr={-0.8}
mt={-0.5}
icon="hammer"
- tooltip={multiline`
+ tooltip={`
This is a gameplay suggestion for bored ais.
You don't have to follow it, unless you want some
ideas for how to spend the round.`}
@@ -97,7 +96,7 @@ const FlavorSection = (props) => {
-
+
System Integrity Report:
@@ -105,7 +104,7 @@ const FlavorSection = (props) => {
>{goal}
-
+
Morality Core Report:
@@ -113,7 +112,7 @@ const FlavorSection = (props) => {
>{allies}
-
+
Overall Sentience Coherence Grade: FAILING.
@@ -202,7 +201,7 @@ export const AntagInfoMalf = (props) => {
height={530}
theme={(antagInfoTab === 0 && 'hackerman') || 'malfunction'}
>
-
+
diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
index 4dfc79cebba7..35e0dbbc3266 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
@@ -1,5 +1,4 @@
import { useBackend } from '../backend';
-import { multiline } from 'common/string';
import { BlockQuote, Button, Dimmer, Section, Stack } from '../components';
import { BooleanLike } from 'common/react';
import { Window } from '../layouts';
@@ -85,7 +84,7 @@ const EmployerSection = (props) => {
buttons={
{
// 0, 2, 3
return status === 0 ? 2 : status === 2 ? 3 : 0;
};
-
-AreaStatusColorButton.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/interfaces/ApprenticeContract.tsx b/tgui/packages/tgui/interfaces/ApprenticeContract.tsx
index 62813b9afbff..b61f9ea59842 100644
--- a/tgui/packages/tgui/interfaces/ApprenticeContract.tsx
+++ b/tgui/packages/tgui/interfaces/ApprenticeContract.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { resolveAsset } from '../assets';
import { useBackend } from '../backend';
import { BlockQuote, Box, Button, Icon, Section, Stack } from '../components';
@@ -21,7 +20,7 @@ export const ApprenticeContract = (props) => {
fluffName="Apprentice of Destruction"
schoolTitle="destruction"
assetName="destruction.png"
- blurb={multiline`
+ blurb={`
Your apprentice is skilled in offensive magic.
They know Magic Missile and Fireball.
`}
@@ -31,7 +30,7 @@ export const ApprenticeContract = (props) => {
fluffName="Student of Translocation"
schoolTitle="bluespace"
assetName="bluespace.png"
- blurb={multiline`
+ blurb={`
Your apprentice is able to defy physics, melting through
solid objects and travelling great distances in the
blink of an eye. They know Teleport and Ethereal Jaunt.
@@ -42,7 +41,7 @@ export const ApprenticeContract = (props) => {
fluffName="Neophyte of Restoration"
schoolTitle="healing"
assetName="healing.png"
- blurb={multiline`
+ blurb={`
Your apprentice is training to cast spells that will
aid your survival. They know Forcewall and Charge and
come with a Staff of Healing.
@@ -53,7 +52,7 @@ export const ApprenticeContract = (props) => {
fluffName="Robeless Pupil"
schoolTitle="robeless"
assetName="robeless.png"
- blurb={multiline`
+ blurb={`
Your apprentice is training to cast spells without
their robes. They know Knock and Mindswap.
`}
@@ -77,8 +76,8 @@ const ApprenticeSelection = (props) => {
diff --git a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.jsx b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.jsx
index cc2039e37ae4..e4f9b31920d6 100644
--- a/tgui/packages/tgui/interfaces/AutomatedAnnouncement.jsx
+++ b/tgui/packages/tgui/interfaces/AutomatedAnnouncement.jsx
@@ -1,9 +1,8 @@
-import { multiline } from 'common/string';
import { useBackend } from '../backend';
import { Button, Input, LabeledList, Section } from '../components';
import { Window } from '../layouts';
-const TOOLTIP_TEXT = multiline`
+const TOOLTIP_TEXT = `
%PERSON will be replaced with their name.
%RANK with their job.
`;
diff --git a/tgui/packages/tgui/interfaces/Biogenerator.jsx b/tgui/packages/tgui/interfaces/Biogenerator.jsx
index 8331913008f7..bb8541b905df 100644
--- a/tgui/packages/tgui/interfaces/Biogenerator.jsx
+++ b/tgui/packages/tgui/interfaces/Biogenerator.jsx
@@ -144,7 +144,7 @@ const ItemList = (props) => {
{' '}
{item.name}
@@ -161,7 +161,7 @@ const ItemList = (props) => {
{
color="transparent"
icon="info"
tooltipPosition="bottom-start"
- tooltip={multiline`
+ tooltip={`
Any gas you pipe into here will be added to the Bluespace
Network! That means any connected Bluespace Vendor (multitool)
will hook up to all the gas stored in this, and charge
diff --git a/tgui/packages/tgui/interfaces/BluespaceVendor.jsx b/tgui/packages/tgui/interfaces/BluespaceVendor.jsx
index f55f63371901..c7192b23c5ce 100644
--- a/tgui/packages/tgui/interfaces/BluespaceVendor.jsx
+++ b/tgui/packages/tgui/interfaces/BluespaceVendor.jsx
@@ -1,7 +1,6 @@
import { filter, sortBy } from 'common/collections';
import { flow } from 'common/fp';
import { toFixed } from 'common/math';
-import { multiline } from 'common/string';
import { useBackend } from '../backend';
import {
Button,
@@ -96,7 +95,7 @@ export const BluespaceVendor = (props) => {
color="transparent"
icon="info"
tooltipPosition="bottom-start"
- tooltip={multiline`
+ tooltip={`
Quick guide for machine use: prepare a tank to create a
new one in the machine, pick how much you want it filled,
and finally press start on the gas of your choice!
diff --git a/tgui/packages/tgui/interfaces/Canvas.tsx b/tgui/packages/tgui/interfaces/Canvas.tsx
index 2ce217cad9f8..894b07c6f63c 100644
--- a/tgui/packages/tgui/interfaces/Canvas.tsx
+++ b/tgui/packages/tgui/interfaces/Canvas.tsx
@@ -1,6 +1,6 @@
import { Color } from 'common/color';
import { decodeHtmlEntities } from 'common/string';
-import { Component, createRef, RefObject } from 'inferno';
+import { Component, createRef, RefObject } from 'react';
import { useBackend } from '../backend';
import { Box, Button, Flex } from '../components';
import { Window } from '../layouts';
@@ -170,10 +170,10 @@ class PaintCanvas extends Component {
width={width}
height={height}
{...rest}
- onMouseDown={this.handleStartDrawing}
- onMouseMove={this.handleDrawing}
- onMouseUp={this.handleEndDrawing}
- onMouseOut={this.handleEndDrawing}
+ onMouseDown={this.handleStartDrawing as any}
+ onMouseMove={this.handleDrawing as any}
+ onMouseUp={this.handleEndDrawing as any}
+ onMouseOut={this.handleEndDrawing as any}
>
Canvas failed to render.
@@ -248,11 +248,9 @@ export const Canvas = (props) => {
style={{
width: '24px',
height: '24px',
- 'border-style': 'solid',
- 'border-color': element.is_selected
- ? 'lightblue'
- : 'black',
- 'border-width': '2px',
+ borderStyle: 'solid',
+ borderColor: element.is_selected ? 'lightblue' : 'black',
+ borderWidth: '2px',
}}
onClick={() =>
act('select_color', {
@@ -279,7 +277,7 @@ export const Canvas = (props) => {
textColor="black"
textAlign="left"
backgroundColor="white"
- style={{ 'border-style': 'inset' }}
+ style={{ borderStyle: 'inset' }}
>
{decodeHtmlEntities(data.name)}
diff --git a/tgui/packages/tgui/interfaces/Cargo.jsx b/tgui/packages/tgui/interfaces/Cargo.jsx
index cf4b9c9dd9e7..38a2613c7fce 100644
--- a/tgui/packages/tgui/interfaces/Cargo.jsx
+++ b/tgui/packages/tgui/interfaces/Cargo.jsx
@@ -447,7 +447,7 @@ const CargoCart = (props) => {
{
: act(effect.act)
}
style={{
- 'vertical-align': 'middle',
- 'margin-left': j !== 0 ? '1px' : '0px',
- 'margin-right':
+ verticalAlign: 'middle',
+ marginLeft: j !== 0 ? '1px' : '0px',
+ marginRight:
j !== list.list.length - 1 ? '1px' : '0px',
- 'border-radius': '5px',
+ borderRadius: '5px',
}}
/>
)}
@@ -692,7 +691,7 @@ const ReverseMenu = (props) => {
{
content="Dropoff Turf"
selected={data.picking_dropoff_turf}
disabled={!data.effectReverse}
- tooltip={multiline`
+ tooltip={`
Where reverse pods
go after landing`}
tooltipPosition="bottom-end"
@@ -725,7 +724,7 @@ const ReverseMenu = (props) => {
inline
icon="trash"
disabled={!data.customDropoff}
- tooltip={multiline`
+ tooltip={`
Clears the custom dropoff
location. Reverse pods will
instead dropoff at the
@@ -769,8 +768,8 @@ const ReverseMenu = (props) => {
};
class PresetsPage extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
presets: [],
};
@@ -938,9 +937,9 @@ class PresetsPage extends Component {
style={
presetIndex === preset.id
? {
- 'border-width': '1px',
- 'border-style': 'solid',
- 'border-color': `hsl(${preset.hue}, 80%, 80%)`,
+ borderWidth: '1px',
+ borderStyle: 'solid',
+ borderColor: `hsl(${preset.hue}, 80%, 80%)`,
}
: ''
}
@@ -964,7 +963,7 @@ const LaunchPage = (props) => {
{
color="transparent"
icon="edit"
selected={data.effectName}
- tooltip={multiline`
+ tooltip={`
Edit pod's
name/desc.`}
tooltipPosition="bottom-start"
@@ -1016,9 +1015,9 @@ const StylePage = (props) => {
}
tooltip={page.title}
style={{
- 'vertical-align': 'middle',
- 'margin-right': '5px',
- 'border-radius': '20px',
+ verticalAlign: 'middle',
+ marginRight: '5px',
+ borderRadius: '20px',
}}
selected={data.styleChoice - 1 === i}
onClick={() => act('setStyle', { style: i })}
@@ -1027,7 +1026,7 @@ const StylePage = (props) => {
className={classes(['supplypods64x64', 'pod_asset' + (i + 1)])}
style={{
transform: 'rotate(45deg) translate(-25%,-10%)',
- 'pointer-events': 'none',
+ pointerEvents: 'none',
}}
/>
@@ -1048,7 +1047,7 @@ const Bays = (props) => {
{
{
{
selected={data.custom_rev_delay}
disabled={!data.effectReverse}
color="transparent"
- tooltip={multiline`
+ tooltip={`
Toggle Reverse Delays
Note: Top set is
normal delays, bottom set
@@ -1179,7 +1178,7 @@ const Sounds = (props) => {
color="transparent"
selected={data.soundVolume !== data.defaultSoundVolume}
tooltip={
- multiline`
+ `
Sound Volume:` + data.soundVolume
}
onClick={() => act('soundVolume')}
diff --git a/tgui/packages/tgui/interfaces/Changelog.jsx b/tgui/packages/tgui/interfaces/Changelog.jsx
index d771c9d58962..8ffe8071a2ae 100644
--- a/tgui/packages/tgui/interfaces/Changelog.jsx
+++ b/tgui/packages/tgui/interfaces/Changelog.jsx
@@ -1,6 +1,6 @@
import { classes } from 'common/react';
import { useBackend } from '../backend';
-import { Component, Fragment } from 'inferno';
+import { Component, Fragment } from 'react';
import {
Box,
Button,
@@ -41,8 +41,8 @@ const icons = {
};
export class Changelog extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
data: 'Loading changelog data...',
selectedDate: '',
diff --git a/tgui/packages/tgui/interfaces/ChemFilter.jsx b/tgui/packages/tgui/interfaces/ChemFilter.jsx
index 382703ed379e..e7ac91e12575 100644
--- a/tgui/packages/tgui/interfaces/ChemFilter.jsx
+++ b/tgui/packages/tgui/interfaces/ChemFilter.jsx
@@ -1,4 +1,4 @@
-import { Fragment } from 'inferno';
+import { Fragment } from 'react';
import { useBackend, useLocalState } from '../backend';
import { Button, Input, Section, Stack } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/ChemReactionChamber.jsx b/tgui/packages/tgui/interfaces/ChemReactionChamber.jsx
index f2608e4379eb..efe7e6a86c12 100644
--- a/tgui/packages/tgui/interfaces/ChemReactionChamber.jsx
+++ b/tgui/packages/tgui/interfaces/ChemReactionChamber.jsx
@@ -107,7 +107,7 @@ export const ChemReactionChamber = (props) => {
{
{
{
{
{
{
{
{pack.name}
diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx
index 4e9177f47ded..1a0a74db2592 100644
--- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx
+++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx
@@ -26,7 +26,7 @@ const GenomeImage = (props) => {
style={{
width: '64px',
margin: '2px',
- 'margin-left': '4px',
+ marginLeft: '4px',
outline,
}}
onClick={onClick}
diff --git a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
index 38a2d932818e..d2166b3c79bd 100644
--- a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
+++ b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx
@@ -16,7 +16,8 @@ import { resolveAsset } from '../assets';
import { formatTime } from '../format';
import { capitalize } from 'common/string';
import nt_logo from '../assets/bg-nanotrasen.svg';
-import { Fragment } from 'inferno';
+import { Fragment } from 'react';
+import { Image } from '../components/Image';
type ExplorationEventData = {
name: string;
@@ -187,14 +188,14 @@ const SignalLostModal = (props) => {
width={30}
height={22}
p={0}
- style={{ 'border-radius': '5%' }}
+ style={{ borderRadius: '5%' }}
>
CONNECTION LOST
@@ -738,13 +739,10 @@ const EventScreen = (props: { drone: DroneData; event: FullEventData }) => {
-
@@ -810,14 +808,7 @@ export const AdventureScreen = (props: {
-
+
@@ -880,7 +871,7 @@ const ExodroneConsoleContent = (props) => {
return (
-
+
diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator.jsx b/tgui/packages/tgui/interfaces/ExosuitFabricator.jsx
index 85631f4b0543..4d2a05378c41 100644
--- a/tgui/packages/tgui/interfaces/ExosuitFabricator.jsx
+++ b/tgui/packages/tgui/interfaces/ExosuitFabricator.jsx
@@ -1,6 +1,6 @@
import { uniqBy } from 'common/collections';
import { createSearch } from 'common/string';
-import { Fragment } from 'inferno';
+import { Fragment } from 'react';
import { useBackend, useSharedState } from '../backend';
import {
Box,
diff --git a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx
index efa29cfcb8ea..d1e52862f061 100644
--- a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx
+++ b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx
@@ -12,6 +12,7 @@ import {
Table,
Divider,
} from '../components';
+import { Image } from '../components/Image';
import { Window } from '../layouts';
type ColorEntry = {
@@ -214,24 +215,12 @@ const PreviewDisplay = (props) => {
{data.sprites?.finished ? (
-
+
) : (
-
-
+
+
)}
@@ -278,14 +267,7 @@ const PreviewDisplay = (props) => {
const SingleSprite = (props) => {
const { source } = props;
- return (
-
- );
+ return ;
};
const LoadingAnimation = () => {
diff --git a/tgui/packages/tgui/interfaces/HoloPay.tsx b/tgui/packages/tgui/interfaces/HoloPay.tsx
index b341dc555070..68e1fffeeb1d 100644
--- a/tgui/packages/tgui/interfaces/HoloPay.tsx
+++ b/tgui/packages/tgui/interfaces/HoloPay.tsx
@@ -167,12 +167,10 @@ const TerminalDisplay = (props) => {
)}
- {/* @ts-ignore */}
{COPYRIGHT_SCROLLER}
- {/* @ts-ignore */}
diff --git a/tgui/packages/tgui/interfaces/HotkeysHelp.tsx b/tgui/packages/tgui/interfaces/HotkeysHelp.tsx
index d2911986dcd7..1d90e40d414b 100644
--- a/tgui/packages/tgui/interfaces/HotkeysHelp.tsx
+++ b/tgui/packages/tgui/interfaces/HotkeysHelp.tsx
@@ -122,7 +122,13 @@ export const HotkeysHelp = (_) => {
) : (
-
+
{binding.name}
),
diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Recipes.jsx b/tgui/packages/tgui/interfaces/Hypertorus/Recipes.jsx
index bb862c3422a5..91219fa8a4a8 100644
--- a/tgui/packages/tgui/interfaces/Hypertorus/Recipes.jsx
+++ b/tgui/packages/tgui/interfaces/Hypertorus/Recipes.jsx
@@ -109,8 +109,6 @@ const MemoRow = (props) => {
);
};
-MemoRow.defaultHooks = activeChange;
-
const GasCellItem = (props) => {
const { gasid, ...rest } = props;
return (
@@ -226,5 +224,3 @@ export const HypertorusRecipes = (props) => {
);
};
-
-HypertorusRecipes.defaultHooks = recipeChange;
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx
index 491b9cc7429d..44ea18920790 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx
@@ -1,5 +1,5 @@
import { Section, Button, Dropdown, Stack, Box, Input } from '../../components';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { shallowDiffers } from 'common/react';
import { fetchRetry } from '../../http';
import { resolveAsset } from '../../assets';
@@ -10,8 +10,8 @@ import { DEFAULT_COMPONENT_MENU_LIMIT, noop } from './constants';
let fetchServerData;
export class ComponentMenu extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
selectedTab: 'All',
currentLimit: DEFAULT_COMPONENT_MENU_LIMIT,
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/Connections.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/Connections.jsx
index 5e7d88eb6388..3eb73f754c42 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/Connections.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/Connections.jsx
@@ -17,8 +17,8 @@ export const Connections = (props) => {
height="100%"
style={{
position: 'absolute',
- 'pointer-events': 'none',
- 'z-index': -1,
+ pointerEvents: 'none',
+ zIndex: -1,
}}
>
{connections.map((val, index) => {
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx
index 40688b1213f7..804bec3641a6 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx
@@ -1,12 +1,12 @@
import { Box, Stack, Button } from '../../components';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { shallowDiffers } from '../../../common/react';
import { ABSOLUTE_Y_OFFSET, noop } from './constants';
import { Port } from './Port';
export class ObjectComponent extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
isDragging: false,
dragPos: null,
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx
index c1ffb8e512be..780e8414f925 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx
@@ -1,12 +1,12 @@
import { Stack, Box } from '../../components';
-import { Component, createRef } from 'inferno';
+import { Component, createRef } from 'react';
import { DisplayName } from './DisplayName';
import { classes } from 'common/react';
import { noop } from './constants';
export class Port extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.iconRef = createRef();
this.componentDidUpdate = this.componentDidUpdate.bind(this);
this.componentDidMount = this.componentDidMount.bind(this);
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx
index 62ecc81bd569..b058d2afde50 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx
@@ -7,12 +7,12 @@ import {
Dropdown,
Icon,
} from '../../components';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { shallowDiffers } from 'common/react';
export class VariableMenu extends Component {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
variable_name: '',
variable_type: 'any',
@@ -89,7 +89,7 @@ export class VariableMenu extends Component {
}
color={val.color}
disabled={!!val.is_list}
- tooltip={multiline`
+ tooltip={`
Drag me onto the circuit's grid
to make a setter for this variable`}
icon="pen"
@@ -98,7 +98,7 @@ export class VariableMenu extends Component {
@@ -537,7 +537,7 @@ export class IntegratedCircuit extends Component {
height="100%"
width="300px"
style={{
- 'background-color': 'rgba(0, 0, 0, 0.3)',
+ backgroundColor: 'rgba(0, 0, 0, 0.3)',
'-ms-user-select': 'none',
}}
unselectable="on"
diff --git a/tgui/packages/tgui/interfaces/Jukebox.jsx b/tgui/packages/tgui/interfaces/Jukebox.jsx
index f42236b94be6..551050296b71 100644
--- a/tgui/packages/tgui/interfaces/Jukebox.jsx
+++ b/tgui/packages/tgui/interfaces/Jukebox.jsx
@@ -33,7 +33,7 @@ export const Jukebox = (props) => {
song.name)}
disabled={active}
diff --git a/tgui/packages/tgui/interfaces/ListInputModal.tsx b/tgui/packages/tgui/interfaces/ListInputModal.tsx
index e2a29aeda659..b67295826ec4 100644
--- a/tgui/packages/tgui/interfaces/ListInputModal.tsx
+++ b/tgui/packages/tgui/interfaces/ListInputModal.tsx
@@ -195,7 +195,7 @@ const ListDisplay = (props) => {
props;
return (
-
+
{filteredItems.map((item, index) => {
return (
{
{
{
buttons={
@@ -175,14 +174,14 @@ const MafiaRole = (props) => {
className={classes(['mafia32x32', roleinfo.revealed_icon])}
style={{
transform: 'scale(2) translate(0px, 10%)',
- 'vertical-align': 'middle',
+ verticalAlign: 'middle',
}}
/>
@@ -206,7 +205,7 @@ const MafiaListOfRoles = (props) => {
color="transparent"
icon="address-book"
tooltipPosition="bottom-start"
- tooltip={multiline`
+ tooltip={`
The top section is the roles in the game. You can
press the question mark to get a quick blurb
about the role itself.`}
@@ -215,7 +214,7 @@ const MafiaListOfRoles = (props) => {
color="transparent"
icon="edit"
tooltipPosition="bottom-start"
- tooltip={multiline`
+ tooltip={`
The bottom section are your notes. on some roles this
will just be an empty box, but on others it records the
actions of your abilities (so for example, your
@@ -263,7 +262,7 @@ const MafiaJudgement = (props) => {
color="transparent"
icon="info"
tooltipPosition="left"
- tooltip={multiline`
+ tooltip={`
When someone is on trial, you are in charge of their fate.
Innocent winning means the person on trial can live to see
another day... and in losing they do not. You can go back
diff --git a/tgui/packages/tgui/interfaces/Mecha/ArmPane.tsx b/tgui/packages/tgui/interfaces/Mecha/ArmPane.tsx
index f72b8d3adaef..378a47fb7bad 100644
--- a/tgui/packages/tgui/interfaces/Mecha/ArmPane.tsx
+++ b/tgui/packages/tgui/interfaces/Mecha/ArmPane.tsx
@@ -42,7 +42,7 @@ export const ArmPane = (props: { weapon: MechWeapon }) => {
-
+
{
return null;
} else {
return (
-
+
{patient.isdead ? 'DECEASED' : 'ALIVE'}
@@ -192,7 +192,7 @@ const SnowflakeSyringe = (props: { weapon: MechWeapon }) => {
const { mode, syringe, max_syringe, reagents, total_reagents } =
props.weapon.snowflake;
return (
-
+
{syringe}/{max_syringe}
@@ -230,7 +230,7 @@ const SnowflakeSyringe = (props: { weapon: MechWeapon }) => {
const SnowflakeExtinguisher = (props: { weapon: MechWeapon }) => {
const { reagents, total_reagents } = props.weapon.snowflake;
return (
-
+
{reagents}/{total_reagents}
@@ -244,7 +244,7 @@ const SnowflakeMode = (props: { weapon: MechWeapon }) => {
const { act, data } = useBackend();
const { mode, name } = props.weapon.snowflake;
return (
-
+
{
const { act, data } = useBackend();
const { power_level, power_max } = data;
if (power_max === null) {
- return ;
+ return No Power cell installed! ;
} else {
return (
{
index={1}
icon="procedures"
name="General Health Scan"
- description={multiline`
+ description={`
Reads back exact values of your general health scan.
`}
/>
@@ -36,7 +35,7 @@ export const MedicalKiosk = (props) => {
index={2}
icon="heartbeat"
name="Symptom Based Checkup"
- description={multiline`
+ description={`
Provides information based on various non-obvious symptoms,
like blood levels or disease status.
`}
@@ -45,7 +44,7 @@ export const MedicalKiosk = (props) => {
index={3}
icon="radiation-alt"
name="Neurological/Radiological Scan"
- description={multiline`
+ description={`
Provides information about brain trauma and radiation.
`}
/>
@@ -53,7 +52,7 @@ export const MedicalKiosk = (props) => {
index={4}
icon="mortar-pestle"
name="Chemical and Psychoactive Scan"
- description={multiline`
+ description={`
Provides a list of consumed chemicals, as well as potential
side effects.
`}
@@ -123,7 +122,7 @@ const MedicalKioskInstructions = (props) => {
{
{
icon="star"
color="transparent"
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This memory pretty bland. It would make for some pretty
mediocre art and is not likely to pass to future generations.
`}
@@ -48,7 +47,7 @@ const MemoryQuality = (props) => {
'linear-gradient(to right, #964B30, #D68B60, #B66B30, #D68B60, #964B30);',
}}
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This memory is not super interesting. It could turn into
an okay story but don't bet on it.
`}
@@ -64,7 +63,7 @@ const MemoryQuality = (props) => {
'linear-gradient(to right, #636363, #a3a3a3, #6e6e6e, #a3a3a3, #636363);',
}}
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This memory is pretty okay! Some good stories could be told
from this and it might even come back in future generations.
`}
@@ -80,7 +79,7 @@ const MemoryQuality = (props) => {
'linear-gradient(to right, #AA771C, #BCB68A, #B38728, #BCB68A, #AA771C);',
}}
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This memory is great! You could tell a great story from it,
and it would have a good chanced pass to future generations!
`}
@@ -95,7 +94,7 @@ const MemoryQuality = (props) => {
'linear-gradient(to right, #56A5B3, #75D4E2, #56A5B3, #75D4E2, #56A5B3)',
}}
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This memory is the stuff of legends! It would make for
legendary art and is likely to pass to future generations.
`}
@@ -115,7 +114,7 @@ export const MemoryPanel = (props) => {
buttons={
{
{' '}
{product.name}
@@ -42,8 +42,8 @@ export const MiningVendor = (props) => {
data.user.points}
content={product.price + ' points'}
diff --git a/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx b/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx
index 982859aa07f7..d49981255f1b 100644
--- a/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx
+++ b/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx
@@ -37,7 +37,7 @@ export const NtosPhysScanner = (props) => {
diff --git a/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx b/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx
index 3f0d2c9e6798..14124d2da49e 100644
--- a/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx
+++ b/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx
@@ -58,7 +58,7 @@ export const NtosPortraitPrinter = (props) => {
height="128px"
width={`${Math.round(128 * current_portrait_ratio)}px`}
style={{
- 'vertical-align': 'middle',
+ verticalAlign: 'middle',
'-ms-interpolation-mode': 'nearest-neighbor',
}}
/>
diff --git a/tgui/packages/tgui/interfaces/NtosRadar.jsx b/tgui/packages/tgui/interfaces/NtosRadar.jsx
index 5de0449f60fa..ed36c2eca7b3 100644
--- a/tgui/packages/tgui/interfaces/NtosRadar.jsx
+++ b/tgui/packages/tgui/interfaces/NtosRadar.jsx
@@ -57,10 +57,10 @@ export const NtosRadarContent = (props) => {
{
{
grow={1}
style={{
overflow: 'hidden',
- 'white-space': 'nowrap',
- 'text-overflow': 'ellipsis',
+ whiteSpace: 'nowrap',
+ textOverflow: 'ellipsis',
}}
>
{
color="label"
style={{
overflow: 'hidden',
- 'white-space': 'nowrap',
- 'text-overflow': 'ellipsis',
+ whiteSpace: 'nowrap',
+ textOverflow: 'ellipsis',
}}
title={currItem?.path}
>
diff --git a/tgui/packages/tgui/interfaces/OutfitManager.jsx b/tgui/packages/tgui/interfaces/OutfitManager.jsx
index 116cfac86dfa..3ad3b8b36d9f 100644
--- a/tgui/packages/tgui/interfaces/OutfitManager.jsx
+++ b/tgui/packages/tgui/interfaces/OutfitManager.jsx
@@ -44,16 +44,16 @@ export const OutfitManager = (props) => {
shrink={1}
style={{
overflow: 'hidden',
- 'white-space': 'nowrap',
- 'text-overflow': 'ellipsis',
+ whiteSpace: 'nowrap',
+ textOverflow: 'ellipsis',
}}
>
act('edit', { outfit: outfit.ref })}
diff --git a/tgui/packages/tgui/interfaces/PaiCard.tsx b/tgui/packages/tgui/interfaces/PaiCard.tsx
index 9b89444aab91..7a2144d36959 100644
--- a/tgui/packages/tgui/interfaces/PaiCard.tsx
+++ b/tgui/packages/tgui/interfaces/PaiCard.tsx
@@ -114,7 +114,7 @@ const CandidateDisplay = (props) => {
style={{
background: '#111111',
border: '1px solid #4972a1',
- 'border-radius': '5px',
+ borderRadius: '5px',
padding: '1rem',
}}
>
diff --git a/tgui/packages/tgui/interfaces/PaiInterface.tsx b/tgui/packages/tgui/interfaces/PaiInterface.tsx
index fb7351e99da0..2bd944b6b64b 100644
--- a/tgui/packages/tgui/interfaces/PaiInterface.tsx
+++ b/tgui/packages/tgui/interfaces/PaiInterface.tsx
@@ -302,7 +302,7 @@ const DirectiveDisplay = (_) => {
Serve your master.
- {directives}
+ {directives}
)}
diff --git a/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx b/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx
index 12053517496f..e21c69602db7 100644
--- a/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx
+++ b/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx
@@ -2,6 +2,7 @@ import { decodeHtmlEntities } from 'common/string';
import { resolveAsset } from '../assets';
import { useBackend, useLocalState } from '../backend';
import { Box, Button, LabeledList, Section, Table } from '../components';
+import { Image } from '../components/Image';
import { Window } from '../layouts';
type PaintingAdminPanelData = {
@@ -42,19 +43,18 @@ export const PaintingAdminPanel = (props) => {
setChosenPaintingRef(null)}>Close
}
>
-
-
+
{decodeHtmlEntities(chosenPainting.title)}
{
{paintings.map((painting) => (
-
+
{decodeHtmlEntities(painting.title)}
{painting.creator_ckey}
-
diff --git a/tgui/packages/tgui/interfaces/PaperSheet.jsx b/tgui/packages/tgui/interfaces/PaperSheet.jsx
index 9aee958cd56e..360db672c93f 100644
--- a/tgui/packages/tgui/interfaces/PaperSheet.jsx
+++ b/tgui/packages/tgui/interfaces/PaperSheet.jsx
@@ -10,7 +10,7 @@
*/
import { classes } from 'common/react';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { marked } from 'marked';
import { useBackend } from '../backend';
import { Box, Flex, Tabs, TextArea, Table } from '../components';
diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx
index 4f965ce44073..9c4873364d52 100644
--- a/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx
+++ b/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx
@@ -8,6 +8,7 @@ import {
Stack,
} from '../../components';
import { resolveAsset } from '../../assets';
+import { Image } from '../../components/Image';
export const ShowDesc = (props) => {
const [desc, setdesc] = useLocalState('desc', '');
@@ -204,7 +205,7 @@ const VarExplanation = {
Now while this is all nice and dandy how does it look like in practice?
If you look at only one direction then movement will look like this:
-
+
>
),
@@ -225,7 +226,7 @@ const VarExplanation = {
UNIFORM RAND(default):
-
+
@@ -233,7 +234,7 @@ const VarExplanation = {
NORMAL RAND:
-
+
@@ -245,7 +246,7 @@ const VarExplanation = {
LINEAR RAND:
-
+
@@ -253,7 +254,7 @@ const VarExplanation = {
SQUARE RAND:
-
+
@@ -288,8 +289,7 @@ const VarExplanation = {
num
A random number between A and B.
-
-
-
-
-
- {
height="128px"
width="128px"
style={{
- 'vertical-align': 'middle',
+ verticalAlign: 'middle',
'-ms-interpolation-mode': 'nearest-neighbor',
}}
/>
diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.jsx b/tgui/packages/tgui/interfaces/PowerMonitor.jsx
index bf0b8a1d93f8..0e317e72d201 100644
--- a/tgui/packages/tgui/interfaces/PowerMonitor.jsx
+++ b/tgui/packages/tgui/interfaces/PowerMonitor.jsx
@@ -1,7 +1,6 @@
import { map, sortBy } from 'common/collections';
import { flow } from 'common/fp';
import { toFixed } from 'common/math';
-import { pureComponentHooks } from 'common/react';
import { useBackend, useLocalState } from '../backend';
import {
Box,
@@ -196,8 +195,6 @@ export const AreaCharge = (props) => {
);
};
-AreaCharge.defaultHooks = pureComponentHooks;
-
const AreaStatusColorBox = (props) => {
const { status } = props;
const power = Boolean(status & 2);
@@ -211,5 +208,3 @@ const AreaStatusColorBox = (props) => {
/>
);
};
-
-AreaStatusColorBox.defaultHooks = pureComponentHooks;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx
index cc4558cd86dc..e5ead1b909bb 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx
@@ -123,10 +123,10 @@ const AntagSelection = (props: { antagonists: Antagonist[]; name: string }) => {
{antagonist.name}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx
index 22bc42166893..0423d1a785c4 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/GamePreferencesPage.tsx
@@ -1,5 +1,5 @@
import { binaryInsertWith, sortBy } from 'common/collections';
-import { InfernoNode } from 'inferno';
+import { ReactNode } from 'react';
import { useBackend } from '../../backend';
import { Box, Flex, Tooltip } from '../../components';
import { PreferencesMenuData } from './data';
@@ -9,7 +9,7 @@ import { TabbedMenu } from './TabbedMenu';
type PreferenceChild = {
name: string;
- children: InfernoNode;
+ children: ReactNode;
};
const binaryInsertPreference = binaryInsertWith(
@@ -28,14 +28,14 @@ export const GamePreferencesPage = (props) => {
)) {
const feature = features[featureId];
- let nameInner: InfernoNode = feature?.name || featureId;
+ let nameInner: ReactNode = feature?.name || featureId;
if (feature?.description) {
nameInner = (
{nameInner}
@@ -43,7 +43,7 @@ export const GamePreferencesPage = (props) => {
);
}
- let name: InfernoNode = (
+ let name: ReactNode = (
{nameInner}
@@ -91,7 +91,7 @@ export const GamePreferencesPage = (props) => {
);
}
- const gamePreferenceEntries: [string, InfernoNode][] = sortByName(
+ const gamePreferenceEntries: [string, ReactNode][] = sortByName(
Object.entries(gamePreferences),
).map(([category, preferences]) => {
return [category, preferences.map((entry) => entry.children)];
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx
index 353caa9d723a..a1556ddd4dc6 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/JobsPage.tsx
@@ -1,6 +1,6 @@
import { sortBy } from 'common/collections';
import { classes } from 'common/react';
-import { InfernoNode, SFC } from 'inferno';
+import { FC, ReactNode } from 'react';
import { useBackend } from '../../backend';
import { Box, Button, Dropdown, Stack, Tooltip } from '../../components';
import { logger } from '../../logging';
@@ -115,7 +115,7 @@ const PriorityButtons = (props: {
{
: name;
// PARIAH EDIT END
- let rightSide: InfernoNode;
+ let rightSide: ReactNode;
if (experienceNeeded) {
const { experience_type, required_playtime } = experienceNeeded;
@@ -239,7 +239,7 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
className={className}
style={{
// PARIAH EDIT
- 'margin-top': 0,
+ marginTop: '0',
}}
>
@@ -251,7 +251,7 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
className="job-name"
width="50%"
style={{
- 'padding-left': '0.3em',
+ paddingLeft: '0.3em',
}}
>
{' '}
@@ -282,7 +282,9 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
);
};
-const Department: SFC<{ department: string }> = (props) => {
+const Department: FC<{ department: string; children?: ReactNode }> = (
+ props,
+) => {
const { children, department: name } = props;
const className = `PreferencesMenu__Jobs__departments--${name}`;
logger.log(name + ': ' + className);
@@ -343,7 +345,7 @@ const Department: SFC<{ department: string }> = (props) => {
// But in order for everything to align, I also need to add the 0.2em padding.
// But also, we can't be aligned with names that break into multiple lines!
const Gap = (props: { amount: number }) => {
- // 0.2em comes from the padding-bottom in the department listing
+ // 0.2em comes from the paddingBottom in the department listing
return ;
};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx
index 552fff65b0c7..72317550ab45 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/KeybindingsPage.tsx
@@ -1,4 +1,4 @@
-import { Component } from 'inferno';
+import { Component } from 'react';
import {
Box,
Button,
@@ -161,7 +161,7 @@ const KeybindingName = (props: { keybinding: Keybinding }) => {
{keybinding.name}
@@ -172,12 +172,6 @@ const KeybindingName = (props: { keybinding: Keybinding }) => {
);
};
-KeybindingName.defaultHooks = {
- onComponentShouldUpdate: (lastProps, nextProps) => {
- return lastProps.keybinding !== nextProps.keybinding;
- },
-};
-
const ResetToDefaultButton = (props: { keybindingId: string }) => {
const { act } = useBackend();
@@ -208,8 +202,8 @@ export class KeybindingsPage extends Component<{}, KeybindingsPageState> {
rebindingHotkey: undefined,
};
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.handleKeyDown = this.handleKeyDown.bind(this);
this.handleKeyUp = this.handleKeyUp.bind(this);
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
index a3265f9dc4e2..79d0328d0536 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
@@ -1,5 +1,5 @@
import { classes } from 'common/react';
-import { InfernoNode } from 'inferno';
+import { ReactNode } from 'react';
import { sendAct, useBackend, useLocalState } from '../../backend';
import {
Autofocus,
@@ -151,10 +151,10 @@ const ChoicedSelection = (props: {
Select {props.name.toLowerCase()}
@@ -414,14 +414,14 @@ const PreferenceList = (props: {
);
}
- let name: InfernoNode = feature.name;
+ let name: ReactNode = feature.name;
if (feature.description) {
name = (
{name}:
@@ -570,7 +570,7 @@ export const MainPage = (props: { openSpecies: () => void }) => {
)}
-
+
void }) => {
-
+
{mainFeatures.map(([clothingKey, clothing]) => {
const catalog =
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx
index ce18a5d6ebcd..36bc8e9767ef 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx
@@ -1,4 +1,4 @@
-import { InfernoNode } from 'inferno';
+import { ReactNode } from 'react';
import { Button } from '../../components';
export const PageButton = (props: {
@@ -8,7 +8,7 @@ export const PageButton =
(props: {
setPage: (page: P) => void;
- children?: InfernoNode;
+ children?: ReactNode;
}) => {
const pageIsActive =
props.currentPage === props.page ||
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
index b9730dda01eb..d272ec3aa8ec 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
@@ -1,4 +1,3 @@
-import { StatelessComponent } from 'inferno';
import { Box, Icon, Stack, Tooltip } from '../../components';
import { PreferencesMenuData, Quirk } from './data';
import { useBackend, useLocalState } from '../../backend';
@@ -33,8 +32,6 @@ const QuirkList = (props: {
{
props.onClick(quirkKey, quirk);
}}
@@ -43,9 +40,9 @@ const QuirkList = (props: {
@@ -53,33 +50,32 @@ const QuirkList = (props: {
@@ -95,8 +91,8 @@ const QuirkList = (props: {
@@ -109,7 +105,11 @@ const QuirkList = (props: {
);
if (quirk.failTooltip) {
- return {child} ;
+ return (
+
+ {child}
+
+ );
} else {
return child;
}
@@ -118,7 +118,7 @@ const QuirkList = (props: {
);
};
-const StatDisplay: StatelessComponent<{}> = (props) => {
+const StatDisplay = (props) => {
return (
| undefined;
export class ServerPreferencesFetcher extends Component<
{
- render: (serverData: ServerData | undefined) => InfernoNode;
+ render: (serverData: ServerData | undefined) => ReactNode;
},
{
serverData?: ServerData;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
index 757d8ec0f6ce..801c94d385ca 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
@@ -168,14 +168,14 @@ const SpeciesPerk = (props: { className: string; perk: Perk }) => {
}
>
-
+
{
-
+
{neutral.map((perk) => {
return (
@@ -288,7 +288,7 @@ const SpeciesPageInner = (props: {
-
+
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx
index 4a9650bd29d3..38f97d8e3ddf 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx
@@ -1,9 +1,9 @@
-import { Component, createRef, InfernoNode, RefObject } from 'inferno';
+import { Component, createRef, ReactNode, RefObject } from 'react';
import { Button, Section, Stack } from '../../components';
import { FlexProps } from '../../components/Flex';
type TabbedMenuProps = {
- categoryEntries: [string, InfernoNode][];
+ categoryEntries: [string, ReactNode][];
contentProps?: FlexProps;
};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts
index 58db32a372d4..789e5e9823a1 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts
@@ -1,17 +1,16 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Abductor: Antagonist = {
key: 'abductor',
name: 'Abductor',
description: [
- multiline`
+ `
Abductors are technologically advanced alien society set on cataloging
all species in the system. Unfortunately for their subjects their methods
are quite invasive.
`,
- multiline`
+ `
You and a partner will become the abductor scientist and agent duo.
As an agent, abduct unassuming victims and bring them back to your UFO.
As a scientist, scout out victims for your agent, keep them safe, and
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts
index c562e4e5ee55..92cd5bdc447c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const BLOB_MECHANICAL_DESCRIPTION = multiline`
+export const BLOB_MECHANICAL_DESCRIPTION = `
The blob infests the station and destroys everything in its path, including
hull, fixtures, and creatures. Spread your mass, collect resources, and
consume the entire station. Make sure to prepare your defenses, because the
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts
index 3cddceb3c3dd..d8a5f135fed9 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
import { BLOB_MECHANICAL_DESCRIPTION } from './blob';
-import { multiline } from 'common/string';
const BlobInfection: Antagonist = {
key: 'blobinfection',
name: 'Blob Infection',
description: [
- multiline`
+ `
At any point in the middle of the shift, be strucken with an infection
that will turn you into the terrifying blob.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts
index 8d4d45f582f4..56cbcbfc97e1 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const BloodBrother: Antagonist = {
key: 'bloodbrother',
name: 'Blood Brother',
description: [
- multiline`
+ `
Team up with other crew members as blood brothers to combine the strengths
of your departments, break each other out of prison, and overwhelm the
station.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts
index 3368ff791760..4db6717a0adf 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts
@@ -1,16 +1,15 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Changeling: Antagonist = {
key: 'changeling',
name: 'Changeling',
description: [
- multiline`
+ `
A highly intelligent alien predator that is capable of altering their
shape to flawlessly resemble a human.
`,
- multiline`
+ `
Transform yourself or others into different identities, and buy from an
arsenal of biological weaponry with the DNA you collect.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts
index bcb16a8d95a6..61f874a2e938 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative';
const ClownOperative: Antagonist = {
key: 'clownoperative',
name: 'Clown Operative',
description: [
- multiline`
+ `
Honk! You have been chosen, for better or worse to join the Syndicate
Clown Operative strike team. Your mission, whether or not you choose
to tickle it, is to honk Nanotrasen's most advanced research facility!
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts
index a3bb81721428..c5cfaf61c2f6 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts
@@ -1,18 +1,17 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Cultist: Antagonist = {
key: 'cultist',
name: 'Cultist',
description: [
- multiline`
+ `
The Geometer of Blood, Nar-Sie, has sent a number of her followers to
Space Station 13. As a cultist, you have an abundance of cult magics at
your disposal, something for all situations. You must work with your
brethren to summon an avatar of your eldritch goddess!
`,
- multiline`
+ `
Armed with blood magic, convert crew members to the Blood Cult, sacrifice
those who get in the way, and summon Nar-Sie.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/familyheadaspirant.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/familyheadaspirant.ts
index f648fa1b723a..5fe0e9d6606a 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/familyheadaspirant.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/familyheadaspirant.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
import { GANGSTER_MECHANICAL_DESCRIPTION } from './gangster';
const FamilyHeadAspirant: Antagonist = {
key: 'familyheadaspirant',
name: 'Family Head Aspirant',
description: [
- multiline`
+ `
A form of family leader that can activate at any point in the middle
of the shift.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts
index 0516788543fc..f05a96c2ec46 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Fugitive: Antagonist = {
key: 'fugitive',
name: 'Fugitive',
description: [
- multiline`
+ `
Wherever you come from, you're being hunted. You have 10 minutes to prepare
before fugitive hunters arrive and start hunting you and your friends down!
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/gangster.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/gangster.ts
index 84fb130c06df..03dcb4ad7346 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/gangster.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/gangster.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const GANGSTER_MECHANICAL_DESCRIPTION = multiline`
+export const GANGSTER_MECHANICAL_DESCRIPTION = `
Convince people to join your family, wear your uniform, tag turf
for the family, and accomplish your family's goals.
`;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts
index fd2081fe49e2..0a1d644266f0 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = multiline`
+export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = `
Armed with a flash, convert as many people to the revolution as you can.
Kill or exile all heads of staff on the station.
`;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts
index b8daffc0b64d..8c2d631bd58a 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const HERETIC_MECHANICAL_DESCRIPTION = multiline`
+export const HERETIC_MECHANICAL_DESCRIPTION = `
Find hidden influences and sacrifice crew members to gain magical
powers and ascend as one of several paths.
`;
@@ -10,7 +9,7 @@ const Heretic: Antagonist = {
key: 'heretic',
name: 'Heretic',
description: [
- multiline`
+ `
Forgotten, devoured, gutted. Humanity has forgotten the eldritch forces
of decay, but the mansus veil has weakened. We will make them taste fear
again...
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts
index c74b2ca01b42..3f8ac5c5b761 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative';
const LoneOperative: Antagonist = {
key: 'loneoperative',
name: 'Lone Operative',
description: [
- multiline`
+ `
A solo nuclear operative that has a higher chance of spawning the longer
the nuclear authentication disk stays in one place.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts
index 1aa9e0034bbd..03aadd752c61 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const MALF_AI_MECHANICAL_DESCRIPTION = multiline`
+export const MALF_AI_MECHANICAL_DESCRIPTION = `
With a law zero to complete your objectives at all costs, combine your
omnipotence and malfunction modules to wreak havoc across the station.
Go delta to destroy the station and all those who opposed you.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts
index d686a78af498..84e52b43dc12 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
import { MALF_AI_MECHANICAL_DESCRIPTION } from './malfai';
@@ -6,7 +5,7 @@ const MalfAIMidround: Antagonist = {
key: 'malfaimidround',
name: 'Value Drifted AI',
description: [
- multiline`
+ `
A form of malfunctioning AI that is given to existing AIs in the middle
of the shift.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts
index b66f03f2b2c6..90046dd625e1 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Nightmare: Antagonist = {
key: 'nightmare',
name: 'Nightmare',
description: [
- multiline`
+ `
Use your light eater to break sources of light to survive and thrive.
Jaunt through the darkness and seek your prey with night vision.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts
index fcb18419a81d..8d4c98139872 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Obsessed: Antagonist = {
key: 'obsessed',
name: 'Obsessed',
description: [
- multiline`
+ `
You're obsessed with someone! Your obsession may begin to notice their
personal items are stolen and their coworkers have gone missing,
but will they realize they are your next victim in time?
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts
index a8b14e88fce8..a8182de9e031 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const OPERATIVE_MECHANICAL_DESCRIPTION = multiline`
+export const OPERATIVE_MECHANICAL_DESCRIPTION = `
Retrieve the nuclear authentication disk, use it to activate the nuclear
fission explosive, and destroy the station.
`;
@@ -10,7 +9,7 @@ const Operative: Antagonist = {
key: 'operative',
name: 'Nuclear Operative',
description: [
- multiline`
+ `
Congratulations, agent. You have been chosen to join the Syndicate
Nuclear Operative strike team. Your mission, whether or not you choose
to accept it, is to destroy Nanotrasen's most advanced research facility!
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts
index cd4e0e948588..7497c6442fcc 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative';
const OperativeMidround: Antagonist = {
key: 'operativemidround',
name: 'Nuclear Assailant',
description: [
- multiline`
+ `
A form of nuclear operative that is offered to ghosts in the middle
of the shift.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts
index c3e26b517e1e..a7196a6cbb2a 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/opportunist.ts
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
import { THIEF_MECHANICAL_DESCRIPTION } from './thief';
@@ -6,7 +5,7 @@ const Opportunist: Antagonist = {
key: 'opportunist',
name: 'Opportunist',
description: [
- multiline`A form of thief that can activate at any point in the middle
+ `A form of thief that can activate at any point in the middle
of the shift, looking to line their paychecks while nobody's looking.`,
THIEF_MECHANICAL_DESCRIPTION,
],
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts
index b8b847da11de..1d2879c86759 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
import { REVOLUTIONARY_MECHANICAL_DESCRIPTION } from './headrevolutionary';
const Provocateur: Antagonist = {
key: 'provocateur',
name: 'Provocateur',
description: [
- multiline`
+ `
A form of head revolutionary that can activate when joining an ongoing
shift.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts
index a23b4e178c87..241b52b3e402 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Revenant: Antagonist = {
key: 'revenant',
name: 'Revenant',
description: [
- multiline`
+ `
Become the mysterious revenant. Break windows, overload lights, and eat
the crew's life force, all while talking to your old community of
disgruntled ghosts.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts
index fabe1d34e5f5..a9c11eda7291 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const SentientDisease: Antagonist = {
key: 'sentientdisease',
name: 'Sentient Disease',
description: [
- multiline`
+ `
Mutate and spread yourself and infect as much of the crew as possible
with a deadly plague of your own creation.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts
index e3e8940dda91..4a11cc94d118 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const SpaceDragon: Antagonist = {
key: 'spacedragon',
name: 'Space Dragon',
description: [
- multiline`
+ `
Become a ferocious space dragon. Breathe fire, summon an army of space
carps, crush walls, and terrorize the station.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts
index 18ce064b3738..e6db1b96f975 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts
@@ -1,16 +1,15 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const SpaceNinja: Antagonist = {
key: 'spaceninja',
name: 'Space Ninja',
description: [
- multiline`
+ `
The Spider Clan practice a sort of augmentation of human flesh in order to
achieve a more perfect state of being and follow Postmodern Space Bushido.
`,
- multiline`
+ `
Become a conniving space ninja, equipped with a katana, gloves to hack
into airlocks and APCs, a suit to make you go near-invisible,
as well as a variety of abilities in your kit. Hack into arrest consoles
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts
index a692736c408e..4a680e5d347c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts
@@ -1,12 +1,11 @@
import { Antagonist, Category } from '../base';
import { TRAITOR_MECHANICAL_DESCRIPTION } from './traitor';
-import { multiline } from 'common/string';
const SyndicateSleeperAgent: Antagonist = {
key: 'syndicatesleeperagent',
name: 'Syndicate Sleeper Agent',
description: [
- multiline`
+ `
A form of traitor that can activate at any point in the middle
of the shift.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts
index 2c3f5ff12645..3c441fafa595 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/thief.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const THIEF_MECHANICAL_DESCRIPTION = multiline`
+export const THIEF_MECHANICAL_DESCRIPTION = `
While all the chaos of the station goes down, try to escape with
some loot without getting caught!
`;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts
index 86f4089277a9..ccb63919982e 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const TRAITOR_MECHANICAL_DESCRIPTION = multiline`
+export const TRAITOR_MECHANICAL_DESCRIPTION = `
Start with an uplink to purchase your gear and take on your sinister
objectives. Ascend through the ranks and become an infamous legend.
`;
@@ -10,7 +9,7 @@ const Traitor: Antagonist = {
key: 'traitor',
name: 'Traitor',
description: [
- multiline`
+ `
An unpaid debt. A score to be settled. Maybe you were just in the wrong
place at the wrong time. Whatever the reasons, you were selected to
infiltrate Space Station 13.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts
index 9c8f5dc84c78..62530a26f67c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts
@@ -1,7 +1,6 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
-export const WIZARD_MECHANICAL_DESCRIPTION = multiline`
+export const WIZARD_MECHANICAL_DESCRIPTION = `
Choose between a variety of powerful spells in order to cause chaos
among Space Station 13.
`;
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts
index 6bea64450e93..a9a1960f3b2c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts
@@ -1,11 +1,10 @@
import { Antagonist, Category } from '../base';
-import { multiline } from 'common/string';
const Xenomorph: Antagonist = {
key: 'xenomorph',
name: 'Xenomorph',
description: [
- multiline`
+ `
Become the extraterrestrial xenomorph. Start as a larva, and progress
your way up the caste, including even the Queen!
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx
index 24c12d75448d..c6475763eaad 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx
@@ -182,7 +182,7 @@ export const NameInput = (props: {
@@ -207,7 +207,7 @@ export const NameInput = (props: {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
index 5e19656cbad9..a5bd303b3940 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
@@ -1,7 +1,6 @@
import { sortBy, sortStrings } from 'common/collections';
import { BooleanLike, classes } from 'common/react';
-import { ComponentType, createComponentVNode, InfernoNode } from 'inferno';
-import { VNodeFlags } from 'inferno-vnode-flags';
+import { ComponentType, createElement, ReactNode } from 'react';
import { sendAct, useBackend, useLocalState } from '../../../../backend';
import {
Box,
@@ -15,7 +14,7 @@ import {
import { createSetPreference, PreferencesMenuData } from '../../data';
import { ServerPreferencesFetcher } from '../../ServerPreferencesFetcher';
-export const sortChoices = sortBy<[string, InfernoNode]>(([name]) => name);
+export const sortChoices = sortBy<[string, ReactNode]>(([name]) => name);
export type Feature<
TReceiving,
@@ -44,14 +43,14 @@ export type FeatureValueProps<
TReceiving,
TSending = TReceiving,
TServerData = undefined,
-> = {
+> = Readonly<{
act: typeof sendAct;
featureId: string;
handleSetValue: (newValue: TSending) => void;
serverData: TServerData | undefined;
shrink?: boolean;
value: TReceiving;
-};
+}>;
export const FeatureColorInput = (props: FeatureValueProps) => {
return (
@@ -70,7 +69,7 @@ export const FeatureColorInput = (props: FeatureValueProps) => {
? props.value
: `#${props.value}`,
border: '2px solid white',
- 'box-sizing': 'content-box',
+ boxSizing: 'content-box',
height: '11px',
width: '11px',
...(props.shrink
@@ -118,7 +117,7 @@ export const CheckboxInputInverse = (
export const createDropdownInput = (
// Map of value to display texts
- choices: Record,
+ choices: Record,
dropdownProps?: Record,
): FeatureValue => {
return (props: FeatureValueProps) => {
@@ -156,7 +155,7 @@ const capitalizeFirstLetter = (text: string) =>
export const StandardizedDropdown = (props: {
choices: string[];
disabled?: boolean;
- displayNames: Record;
+ displayNames: Record;
onSetValue: (newValue: string) => void;
value: string;
}) => {
@@ -242,7 +241,7 @@ export const FeatureIconnedDropdownInput = (
const displayNames = Object.fromEntries(
Object.entries(textNames).map(([choice, textName]) => {
- let element: InfernoNode = textName;
+ let element: ReactNode = textName;
if (icons && icons[choice]) {
const icon = icons[choice];
@@ -329,19 +328,15 @@ export const FeatureValueInput = (props: {
return (
{
- return createComponentVNode(
- VNodeFlags.ComponentUnknown,
- feature.component,
- {
- act: props.act,
- featureId: props.featureId,
- serverData: serverData && serverData[props.featureId],
- shrink: props.shrink,
-
- handleSetValue: changeValue,
- value: predictedValue,
- },
- );
+ return createElement(feature.component, {
+ act: props.act,
+ featureId: props.featureId,
+ serverData: serverData?.[props.featureId] as any,
+ shrink: props.shrink,
+
+ handleSetValue: changeValue,
+ value: predictedValue,
+ });
}}
/>
);
@@ -389,7 +384,7 @@ export const FeatureTriColorInput = (props: FeatureValueProps) => {
? props.value[index]
: `#${props.value[index]}`,
border: '2px solid white',
- 'box-sizing': 'content-box',
+ boxSizing: 'content-box',
height: '11px',
width: '11px',
...(props.shrink
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx
index f8252412fc99..772e619bc573 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx
@@ -1,10 +1,9 @@
-import { multiline } from 'common/string';
import { CheckboxInput, FeatureToggle } from '../base';
export const broadcast_login_logout: FeatureToggle = {
name: 'Broadcast login/logout',
category: 'GAMEPLAY',
- description: multiline`
+ description: `
When enabled, disconnecting and reconnecting will announce to deadchat.
`,
component: CheckboxInput,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx
index 0703c7ef04c0..3184b43a456b 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx
@@ -1,10 +1,9 @@
-import { multiline } from 'common/string';
import { CheckboxInput, FeatureToggle } from '../base';
export const darkened_flash: FeatureToggle = {
name: 'Enable darkened flashes',
category: 'GAMEPLAY',
- description: multiline`
+ description: `
When toggled, being flashed will show a dark screen rather than a
bright one.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx
index 3f1c0a865707..4a1fcaa92e17 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import {
CheckboxInput,
FeatureChoiced,
@@ -20,7 +19,7 @@ export const ghost_hud: FeatureToggle = {
export const ghost_orbit: FeatureChoiced = {
name: 'Ghost orbit',
category: 'GHOST',
- description: multiline`
+ description: `
The shape in which your ghost will orbit.
Requires BYOND membership.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx
index 58b1a5b99146..ddd9be2ad777 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { FeatureToggle, CheckboxInput } from '../base';
export const chat_bankcard: FeatureToggle = {
@@ -17,7 +16,7 @@ export const chat_dead: FeatureToggle = {
export const chat_ghostears: FeatureToggle = {
name: 'Hear all messages',
category: 'GHOST',
- description: multiline`
+ description: `
When enabled, you will be able to hear all speech as a ghost.
When disabled, you will only be able to hear nearby speech.
`,
@@ -55,7 +54,7 @@ export const chat_ghostsight: FeatureToggle = {
export const chat_ghostwhisper: FeatureToggle = {
name: 'See all whispers',
category: 'GHOST',
- description: multiline`
+ description: `
When enabled, you will be able to hear all whispers as a ghost.
When disabled, you will only be able to hear nearby whispers.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx
index 07156fe6b02f..4bde004fa20c 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx
@@ -1,10 +1,9 @@
-import { multiline } from 'common/string';
import { FeatureToggle, CheckboxInput, CheckboxInputInverse } from '../base';
export const admin_ignore_cult_ghost: FeatureToggle = {
name: 'Prevent being summoned as a cult ghost',
category: 'ADMIN',
- description: multiline`
+ description: `
When enabled and observing, prevents Spirit Realm from forcing you
into a cult ghost.
`,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx
index 8d3c8b174269..23ab23bfaf66 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx
@@ -1,10 +1,9 @@
-import { multiline } from 'common/string';
import { Feature, FeatureDropdownInput } from '../base';
export const preferred_map: Feature = {
name: 'Preferred map',
category: 'GAMEPLAY',
- description: multiline`
+ description: `
During map rotation, prefer this map be chosen.
This does not affect the map vote, only random rotation when a vote
is not held.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx
index a391e61855c5..60f8b1d11263 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import {
FeatureColorInput,
Feature,
@@ -9,7 +8,7 @@ import {
export const screentip_color: Feature = {
name: 'Screentips color',
category: 'UI',
- description: multiline`
+ description: `
The color of screen tips, the text you see when hovering over something.
`,
component: FeatureColorInput,
@@ -18,7 +17,7 @@ export const screentip_color: Feature = {
export const screentip_pref: FeatureChoiced = {
name: 'Enable screentips',
category: 'UI',
- description: multiline`
+ description: `
Enables screen tips, the text you see when hovering over something.
When set to "Only with tips", will only show when there is more information
than just the name, such as what right-clicking it does.
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx
index 34d668642599..edbdb25ef1cb 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import {
CheckboxInput,
Feature,
@@ -9,7 +8,7 @@ import {
export const enable_tips: FeatureToggle = {
name: 'Enable tooltips',
category: 'TOOLTIPS',
- description: multiline`
+ description: `
Do you want to see tooltips when hovering over items?
`,
component: CheckboxInput,
@@ -18,7 +17,7 @@ export const enable_tips: FeatureToggle = {
export const tip_delay: Feature = {
name: 'Tooltip delay (in milliseconds)',
category: 'TOOLTIPS',
- description: multiline`
+ description: `
How long should it take to see a tooltip when hovering over items?
`,
component: FeatureNumberInput,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx
index c4b7b6c2768d..d8b0ce0b4ae6 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx
@@ -1,10 +1,9 @@
-import { multiline } from 'common/string';
import { CheckboxInput, FeatureToggle } from '../base';
export const windowflashing: FeatureToggle = {
name: 'Enable window flashing',
category: 'UI',
- description: multiline`
+ description: `
When toggled, some important events will make your game icon flash on your
task tray.
`,
diff --git a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
index b3414cd942f0..bb8ec931e521 100644
--- a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
+++ b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
@@ -36,7 +36,7 @@ export const ProcCallMenu = (props) => {
return (
-
+
diff --git a/tgui/packages/tgui/interfaces/ProduceConsole.jsx b/tgui/packages/tgui/interfaces/ProduceConsole.jsx
index 22953df64d1e..c658c561cea6 100644
--- a/tgui/packages/tgui/interfaces/ProduceConsole.jsx
+++ b/tgui/packages/tgui/interfaces/ProduceConsole.jsx
@@ -1,4 +1,3 @@
-import { multiline } from 'common/string';
import { useBackend, useLocalState } from '../backend';
import {
Box,
@@ -170,7 +169,7 @@ const CheckoutTab = (props) => {
fluid
icon="plane-departure"
content="Purchase"
- tooltip={multiline`
+ tooltip={`
Your groceries will arrive at cargo,
and hopefully get delivered by them.
`}
@@ -184,7 +183,7 @@ const CheckoutTab = (props) => {
icon="parachute-box"
color="yellow"
content="Express"
- tooltip={multiline`
+ tooltip={`
Sends the ingredients instantly,
and locks the console longer. Doubles the price!
`}
diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.jsx b/tgui/packages/tgui/interfaces/RapidPipeDispenser.jsx
index 5a867baa18b3..ce20d513f21e 100644
--- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.jsx
+++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.jsx
@@ -1,5 +1,4 @@
import { classes } from 'common/react';
-import { multiline } from 'common/string';
import { useBackend, useLocalState } from '../backend';
import {
Box,
@@ -255,7 +254,7 @@ export const SmartPipeBlockSection = (props) => {
color="transparent"
icon="info"
tooltipPosition="right"
- tooltip={multiline`
+ tooltip={`
This is a panel for blocking certain connection
directions for the smart pipes.
The button in the center resets to
diff --git a/tgui/packages/tgui/interfaces/Safe.jsx b/tgui/packages/tgui/interfaces/Safe.jsx
index 8796a564b8fc..bf0fcdb91f20 100644
--- a/tgui/packages/tgui/interfaces/Safe.jsx
+++ b/tgui/packages/tgui/interfaces/Safe.jsx
@@ -1,4 +1,4 @@
-import { Fragment } from 'inferno';
+import { Fragment } from 'react';
import { resolveAsset } from '../assets';
import { useBackend } from '../backend';
import { Box, Button, Icon, Section } from '../components';
diff --git a/tgui/packages/tgui/interfaces/SelectEquipment.jsx b/tgui/packages/tgui/interfaces/SelectEquipment.jsx
index b0668b49abb1..f417e48b4787 100644
--- a/tgui/packages/tgui/interfaces/SelectEquipment.jsx
+++ b/tgui/packages/tgui/interfaces/SelectEquipment.jsx
@@ -191,8 +191,8 @@ const CurrentlySelectedDisplay = (props) => {
title={entry?.path}
style={{
overflow: 'hidden',
- 'white-space': 'nowrap',
- 'text-overflow': 'ellipsis',
+ whiteSpace: 'nowrap',
+ textOverflow: 'ellipsis',
}}
>
{entry?.name}
diff --git a/tgui/packages/tgui/interfaces/SimpleBot.tsx b/tgui/packages/tgui/interfaces/SimpleBot.tsx
index 0e7b206fede9..7dba3e8cd31f 100644
--- a/tgui/packages/tgui/interfaces/SimpleBot.tsx
+++ b/tgui/packages/tgui/interfaces/SimpleBot.tsx
@@ -1,4 +1,3 @@
-import { multiline } from '../../common/string';
import { useBackend } from '../backend';
import {
Button,
@@ -122,7 +121,7 @@ const PaiButton = (_) => {
No PAI Inserted
@@ -133,7 +132,7 @@ const PaiButton = (_) => {
disabled={!card_inserted}
icon="eject"
onClick={() => act('eject_pai')}
- tooltip={multiline`Ejects the current PAI.`}
+ tooltip={`Ejects the current PAI.`}
>
Eject PAI
@@ -270,7 +269,7 @@ const MedbotSync = (_) => {
return (
{
{
-
+
{(left_sign === 'none' && (
{
FIGHT!
{
name="The Classic Wizard"
icon="fire"
author="Archchancellor Gray"
- blurb={multiline`
+ blurb={`
This is the classic wizard, crazy popular in
the 2550's. Comes with Fireball, Magic Missile,
Ei Nath, and Ethereal Jaunt. The key here is that
@@ -285,7 +284,7 @@ const Loadouts = (props) => {
loadoutId="loadout_hammer"
loadoutColor="green"
author="Jegudiel Worldshaker"
- blurb={multiline`
+ blurb={`
The power of the mighty Mjolnir! Best not to lose it.
This loadout has Summon Item, Mutate, Blink, Force Wall,
Tesla Blast, and Mjolnir. Mutate is your utility in this case:
@@ -302,7 +301,7 @@ const Loadouts = (props) => {
loadoutId="loadout_army"
loadoutColor="yellow"
author="Prospero Spellstone"
- blurb={multiline`
+ blurb={`
Why kill when others will gladly do it for you?
Embrace chaos with your kit: Soulshards, Staff of Change,
Necro Stone, Teleport, and Jaunt! Remember, no offense spells!
@@ -314,7 +313,7 @@ const Loadouts = (props) => {
loadoutId="loadout_tap"
loadoutColor="white"
author="Tom the Empty"
- blurb={multiline`
+ blurb={`
Embrace the dark, and tap into your soul.
You can recharge very long recharge spells
like Ei Nath by jumping into new bodies with
diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx
index 8d3f4f1c70e9..f3e01c8867f8 100644
--- a/tgui/packages/tgui/interfaces/StripMenu.tsx
+++ b/tgui/packages/tgui/interfaces/StripMenu.tsx
@@ -3,6 +3,7 @@ import { BooleanLike } from 'common/react';
import { resolveAsset } from '../assets';
import { useBackend } from '../backend';
import { Box, Button, Icon, Stack } from '../components';
+import { Image } from '../components/Image';
import { Window } from '../layouts';
const ROWS = 5;
@@ -27,8 +28,8 @@ const CornerText = (props: {
style={{
position: 'relative',
left: align === 'left' ? '2px' : '-2px',
- 'text-align': align,
- 'text-shadow': '1px 1px 1px #555',
+ textAlign: align,
+ textShadow: '1px 1px 1px #555',
}}
>
{children}
@@ -295,14 +296,12 @@ export const StripMenu = (props) => {
}
content = (
-
);
@@ -320,7 +319,7 @@ export const StripMenu = (props) => {
ml={0}
mt={1.3}
style={{
- 'text-align': 'center',
+ textAlign: 'center',
height: '100%',
width: '100%',
}}
@@ -364,8 +363,7 @@ export const StripMenu = (props) => {
}}
>
{slot.image && (
- {
position: 'absolute',
bottom: 0,
right: 0,
- 'z-index': 2,
+ zIndex: '2',
}}
>
diff --git a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
index c20124c18763..fad53e06a757 100644
--- a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
+++ b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
@@ -1,7 +1,7 @@
import { sortBy } from 'common/collections';
import { KEY_DOWN, KEY_ENTER, KEY_UP } from 'common/keycodes';
import { BooleanLike } from 'common/react';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { useBackend } from '../backend';
import { Button, KeyListener, Stack } from '../components';
import { BodyZone, BodyZoneSelector } from '../components/BodyZoneSelector';
diff --git a/tgui/packages/tgui/interfaces/SyndContractor.jsx b/tgui/packages/tgui/interfaces/SyndContractor.jsx
index b079f338a76a..48d553c35186 100644
--- a/tgui/packages/tgui/interfaces/SyndContractor.jsx
+++ b/tgui/packages/tgui/interfaces/SyndContractor.jsx
@@ -1,4 +1,4 @@
-import { Component, Fragment } from 'inferno';
+import { Component, Fragment } from 'react';
import { useBackend, useLocalState } from '../backend';
import {
Box,
diff --git a/tgui/packages/tgui/interfaces/Thermometer.jsx b/tgui/packages/tgui/interfaces/Thermometer.jsx
index 4a9eae100c3b..85a5eb7c44a5 100644
--- a/tgui/packages/tgui/interfaces/Thermometer.jsx
+++ b/tgui/packages/tgui/interfaces/Thermometer.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'inferno';
+import { Component } from 'react';
import { useBackend } from '../backend';
import { Box, Stack } from '../components';
import { Window } from '../layouts';
@@ -26,7 +26,7 @@ export class Thermometer extends Component {
justify="space-around"
backgroundColor="#242322"
style={{
- 'background-image':
+ backgroundImage:
"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAABlBMVEVya3UjIyN3S/1dAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAMSURBVAjXY2hgcAAAAcQAwUlFKkkAAAAASUVORK5CYII=')",
}}
>
@@ -52,12 +52,12 @@ const ThermometerIcon = (props) => {
width: '22px',
height: '340px',
margin: '0 auto',
- 'background-color': '#595959',
+ backgroundColor: '#595959',
border: '4px solid #363636',
- 'border-radius': '12px',
- 'border-bottom': 'none',
- 'border-index': '0',
- 'box-shadow': '4px 4px #000000',
+ borderRadius: '12px',
+ borderBottom: 'none',
+ borderIndex: '0',
+ boxShadow: '4px 4px #000000',
}}
>
{
transition: 'height 2s ease-out',
// Temp in %
height: `${(temperature / maxTemperature) * 100}%`,
- 'background-color': '#bd2020',
- 'border-radius': '8px',
- 'border-bottom': 'none',
- 'z-index': '1',
+ backgroundColor: '#bd2020',
+ borderRadius: '8px',
+ borderBottom: 'none',
+ zIndex: '1',
}}
/>
@@ -81,17 +81,17 @@ const ThermometerIcon = (props) => {
style={{
position: 'relative',
width: '56px',
- 'line-height': '48px',
- 'text-align': 'center',
+ lineHeight: '48px',
+ textAlign: 'center',
margin: '-8px auto 0 auto',
- 'background-color': '#bd2020',
+ backgroundColor: '#bd2020',
border: '4px solid #363636',
- 'border-spacing': '5px',
- 'border-radius': '35px',
- 'border-index': '1',
- 'border-bottom': '0.1',
- 'box-shadow': '4px 4px #000000',
- 'z-index': '0',
+ borderSpacing: '5px',
+ borderRadius: '35px',
+ borderIndex: '1',
+ borderBottom: '0.1',
+ boxShadow: '4px 4px #000000',
+ zIndex: '0',
}}
>
{temperature}K
diff --git a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx
index 1a1861001e57..f405e5b8623e 100644
--- a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx
+++ b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx
@@ -30,7 +30,7 @@ const PlaytimeSection = (props) => {
collapsing
p={0.5}
style={{
- 'vertical-align': 'middle',
+ verticalAlign: 'middle',
}}
>
{jobName}
diff --git a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
index 029596e87a27..45922f14b24a 100644
--- a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
+++ b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
@@ -149,7 +149,7 @@ export const TraitorObjectiveDebug = (props) => {
backgroundColor="green"
height="5px"
style={{
- 'z-index': 5,
+ zIndex: '5',
}}
/>
{
top={0}
left={1}
style={{
- 'z-index': 5,
+ zIndex: '5',
}}
>
{/* Time in minutes of this threshold */}
@@ -259,7 +259,6 @@ export const TraitorObjectiveDebug = (props) => {
{
@@ -405,7 +404,7 @@ const ObjectiveBox = (props: ObjectiveBoxProps) => {
(objective.progression_reward[1] / sizeLimit) * window.innerWidth
}px`}
style={{
- 'white-space': 'nowrap',
+ whiteSpace: 'nowrap',
}}
>
{objective.progression_reward[0] / 600}
@@ -420,7 +419,7 @@ const ObjectiveBox = (props: ObjectiveBoxProps) => {
backgroundColor="red"
width={`${objective.telecrystal_reward[1] * 10}px`}
style={{
- 'white-space': 'nowrap',
+ whiteSpace: 'nowrap',
}}
>
{objective.telecrystal_reward[0]}
diff --git a/tgui/packages/tgui/interfaces/TramControl.jsx b/tgui/packages/tgui/interfaces/TramControl.jsx
index 80219ef46c2a..c330a46ce1b9 100644
--- a/tgui/packages/tgui/interfaces/TramControl.jsx
+++ b/tgui/packages/tgui/interfaces/TramControl.jsx
@@ -112,7 +112,7 @@ export const TramControl = (props) => {
tooltipPosition="bottom"
tooltip={dep}
style={{
- 'border-radius': '5em',
+ borderRadius: '5em',
border: '2px solid white',
}}
/>
diff --git a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
index aa6d22c317c1..f2ea38d67cbc 100644
--- a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
+++ b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
@@ -1,5 +1,5 @@
import { BooleanLike, classes } from 'common/react';
-import { Component } from 'inferno';
+import { Component } from 'react';
import {
Section,
Stack,
@@ -64,8 +64,8 @@ export class ObjectiveMenu extends Component<
ObjectiveMenuProps,
ObjectiveMenuState
> {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
draggingObjective: null,
objectiveX: 0,
@@ -162,7 +162,7 @@ export class ObjectiveMenu extends Component<
@@ -242,17 +242,7 @@ export class ObjectiveMenu extends Component<
)) ||
(potentialObjectives.length < maximumPotentialObjectives && (
-
+
{ObjectiveFunction(draggingObjective, false)}
@@ -464,9 +454,9 @@ const ObjectiveElement = (props: ObjectiveElementProps) => {
{
inline
className={reputation.gradient}
style={{
- 'border-radius': '0',
+ borderRadius: '0',
border: '2px solid rgba(0, 0, 0, 0.5)',
- 'border-left': 'none',
- 'border-right': 'none',
+ borderLeft: 'none',
+ borderRight: 'none',
}}
position="relative"
width="100%"
diff --git a/tgui/packages/tgui/interfaces/Uplink/calculateReputationLevel.tsx b/tgui/packages/tgui/interfaces/Uplink/calculateReputationLevel.tsx
index 7efe50b1cf2e..ffb6375c647b 100644
--- a/tgui/packages/tgui/interfaces/Uplink/calculateReputationLevel.tsx
+++ b/tgui/packages/tgui/interfaces/Uplink/calculateReputationLevel.tsx
@@ -90,7 +90,7 @@ export const reputationLevelsTooltip = (
color="white"
className={value.gradient}
style={{
- 'border-radius': '5px',
+ borderRadius: '5px',
display: 'inline-block',
}}
px={0.8}
@@ -137,7 +137,7 @@ export const calculateReputationLevel = (
color="white"
className={reputation.gradient}
style={{
- 'border-radius': '5px',
+ borderRadius: '5px',
display: 'inline-block',
}}
px={0.8}
diff --git a/tgui/packages/tgui/interfaces/Uplink/index.tsx b/tgui/packages/tgui/interfaces/Uplink/index.tsx
index 12a1aea7ae2f..fa92e4963130 100644
--- a/tgui/packages/tgui/interfaces/Uplink/index.tsx
+++ b/tgui/packages/tgui/interfaces/Uplink/index.tsx
@@ -1,7 +1,7 @@
import { useBackend } from '../../backend';
import { Window } from '../../layouts';
import { GenericUplink, Item } from './GenericUplink';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { fetchRetry } from '../../http';
import { resolveAsset } from '../../assets';
import { BooleanLike } from 'common/react';
@@ -76,8 +76,8 @@ type ItemExtraData = {
let fetchServerData: Promise | undefined;
export class Uplink extends Component<{}, UplinkState> {
- constructor() {
- super();
+ constructor(props) {
+ super(props);
this.state = {
allItems: [],
allCategories: [],
diff --git a/tgui/packages/tgui/interfaces/Vendatray.jsx b/tgui/packages/tgui/interfaces/Vendatray.jsx
index fa4164f56e20..e0aa9aef7072 100644
--- a/tgui/packages/tgui/interfaces/Vendatray.jsx
+++ b/tgui/packages/tgui/interfaces/Vendatray.jsx
@@ -69,7 +69,7 @@ const VendingImage = (props) => {
width="96px"
style={{
'-ms-interpolation-mode': 'nearest-neighbor',
- 'vertical-align': 'middle',
+ verticalAlign: 'middle',
}}
/>
diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx
index 24c749401661..2e16980a9c68 100644
--- a/tgui/packages/tgui/interfaces/Vending.tsx
+++ b/tgui/packages/tgui/interfaces/Vending.tsx
@@ -239,8 +239,7 @@ const ProductImage = (props) => {
) : (
@@ -248,8 +247,7 @@ const ProductImage = (props) => {
icon={product.icon}
icon_state={product.icon_state}
style={{
- 'vertical-align': 'middle',
- 'horizontal-align': 'middle',
+ verticalAlign: 'middle',
}}
/>
);
diff --git a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
index 9b080e3d2bee..b708b22d64a5 100644
--- a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
+++ b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx
@@ -1,4 +1,4 @@
-import { InfernoNode } from 'inferno';
+import { ReactNode } from 'react';
import { useBackend, useLocalState } from '../../backend';
import {
Box,
@@ -45,7 +45,7 @@ type Gas = {
};
const GasSearchBar = (props: {
- title: InfernoNode;
+ title: ReactNode;
onChange: (inputValue: string) => void;
activeInput: boolean;
setActiveInput: (toggle: boolean) => void;
@@ -180,7 +180,7 @@ const ReactionHandbook = (props) => {
{factor.factor_name + ':'}
diff --git a/tgui/packages/tgui/interfaces/common/RecipeLookup.jsx b/tgui/packages/tgui/interfaces/common/RecipeLookup.jsx
index 9e0872c4795a..2d3153d1de51 100644
--- a/tgui/packages/tgui/interfaces/common/RecipeLookup.jsx
+++ b/tgui/packages/tgui/interfaces/common/RecipeLookup.jsx
@@ -177,7 +177,7 @@ export const RecipeLookup = (props) => {
height="50px"
position="relative"
style={{
- 'background-color': 'black',
+ backgroundColor: 'black',
}}
>
{
const { className, theme = 'nanotrasen', children, ...rest } = props;
@@ -39,9 +38,4 @@ const LayoutContent = (props) => {
);
};
-LayoutContent.defaultHooks = {
- onComponentDidMount: (node) => addScrollableNode(node),
- onComponentWillUnmount: (node) => removeScrollableNode(node),
-};
-
Layout.Content = LayoutContent;
diff --git a/tgui/packages/tgui/layouts/Pane.jsx b/tgui/packages/tgui/layouts/Pane.jsx
index abc9047a77fc..37773637f1e8 100644
--- a/tgui/packages/tgui/layouts/Pane.jsx
+++ b/tgui/packages/tgui/layouts/Pane.jsx
@@ -13,7 +13,7 @@ import { Layout } from './Layout';
export const Pane = (props) => {
const { theme, children, className, ...rest } = props;
const { suspended } = useBackend();
- const { debugLayout } = useDebug();
+ const { debugLayout = false } = useDebug();
return (
@@ -30,7 +30,9 @@ const PaneContent = (props) => {
className={classes(['Window__content', className])}
{...rest}
>
- {(fitted && children) || (
+ {fitted ? (
+ children
+ ) : (
{children}
)}
diff --git a/tgui/packages/tgui/layouts/Window.jsx b/tgui/packages/tgui/layouts/Window.jsx
index 403fe33c1913..0baf09438634 100644
--- a/tgui/packages/tgui/layouts/Window.jsx
+++ b/tgui/packages/tgui/layouts/Window.jsx
@@ -6,7 +6,7 @@
import { classes } from 'common/react';
import { decodeHtmlEntities, toTitleCase } from 'common/string';
-import { Component } from 'inferno';
+import { Component } from 'react';
import { backendSuspendStart, globalStore, useBackend } from '../backend';
import { Icon } from '../components';
import { UI_DISABLED, UI_INTERACTIVE, UI_UPDATE } from '../constants';
@@ -26,6 +26,10 @@ const logger = createLogger('Window');
const DEFAULT_SIZE = [400, 600];
export class Window extends Component {
+ constructor(props) {
+ super(props);
+ }
+
componentDidMount() {
const { suspended } = useBackend();
const { canClose = true } = this.props;
@@ -101,15 +105,15 @@ export class Window extends Component {
<>
>
)}
@@ -171,7 +175,7 @@ const TitleBar = (props) => {
)}
fancy && onDragStart(e)}
+ onMouseDown={(e) => fancy && onDragStart(e)}
/>
{(typeof title === 'string' &&
diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json
index 0f9cba52939d..057f3017bd12 100644
--- a/tgui/packages/tgui/package.json
+++ b/tgui/packages/tgui/package.json
@@ -1,16 +1,18 @@
{
"private": true,
"name": "tgui",
- "version": "4.3.0",
+ "version": "5.0.0",
"dependencies": {
"@popperjs/core": "^2.9.3",
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
"common": "workspace:*",
"dateformat": "^4.5.1",
"dompurify": "^2.3.1",
- "inferno": "^7.4.8",
- "inferno-vnode-flags": "^7.4.8",
"js-yaml": "^4.1.0",
"marked": "^4.0.10",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
diff --git a/tgui/packages/tgui/renderer.ts b/tgui/packages/tgui/renderer.ts
index a17d71bfa38a..50ba4814662a 100644
--- a/tgui/packages/tgui/renderer.ts
+++ b/tgui/packages/tgui/renderer.ts
@@ -1,10 +1,11 @@
import { perf } from 'common/perf';
-import { render } from 'inferno';
+import { ReactNode } from 'react';
import { createLogger } from './logging';
+import { createRoot, Root } from 'react-dom/client';
const logger = createLogger('renderer');
-let reactRoot: any;
+let reactRoot: Root;
let initialRender: string | boolean = true;
let suspended = false;
@@ -19,7 +20,7 @@ export const suspendRenderer = () => {
};
type CreateRenderer = (
- getVNode?: (...args: T) => any,
+ getVNode?: (...args: T) => ReactNode,
) => (...args: T) => void;
export const createRenderer: CreateRenderer =
@@ -28,12 +29,13 @@ export const createRenderer: CreateRenderer =
perf.mark('render/start');
// Start rendering
if (!reactRoot) {
- reactRoot = document.getElementById('react-root');
+ const element = document.getElementById('react-root');
+ reactRoot = createRoot(element!);
}
if (getVNode) {
- render(getVNode(...args), reactRoot);
+ reactRoot.render(getVNode(...args));
} else {
- render(args[0] as any, reactRoot);
+ reactRoot.render(args[0] as any);
}
perf.mark('render/finish');
if (suspended) {
diff --git a/tgui/packages/tgui/store.js b/tgui/packages/tgui/store.js
index 3afc41607c47..ab582e844adf 100644
--- a/tgui/packages/tgui/store.js
+++ b/tgui/packages/tgui/store.js
@@ -6,7 +6,6 @@
import { flow } from 'common/fp';
import { applyMiddleware, combineReducers, createStore } from 'common/redux';
-import { Component } from 'inferno';
import { assetMiddleware } from './assets';
import { backendMiddleware, backendReducer } from './backend';
import { debugMiddleware, debugReducer, relayMiddleware } from './debug';
@@ -81,18 +80,3 @@ const createStackAugmentor = (store) => (stack, error) => {
});
return augmentedStack;
};
-
-/**
- * Store provider for Inferno apps.
- * This can be removed when Inferno is removed
- */
-export class StoreProvider extends Component {
- getChildContext() {
- const { store } = this.props;
- return { store };
- }
-
- render() {
- return this.props.children;
- }
-}
diff --git a/tgui/packages/tgui/styles/layouts/Window.scss b/tgui/packages/tgui/styles/layouts/Window.scss
index 232dd8396bbf..93b6edd37581 100644
--- a/tgui/packages/tgui/styles/layouts/Window.scss
+++ b/tgui/packages/tgui/styles/layouts/Window.scss
@@ -44,8 +44,6 @@
.Window__contentPadding {
margin: 0.5rem;
- // IE8: Calc not supported
- height: 100%;
// 0.01 is needed to make the scrollbar not appear
// due to rem rendering inaccuracies in IE11.
height: calc(100% - 1.01rem);
diff --git a/tgui/public/tgui-polyfill.min.js b/tgui/public/tgui-polyfill.min.js
index 68c21147e6d9..fc7c7a512876 100644
--- a/tgui/public/tgui-polyfill.min.js
+++ b/tgui/public/tgui-polyfill.min.js
@@ -1 +1 @@
-(function(){"use strict";if(!window.Int32Array){window.Int32Array=Array}!function(){function t(){var e=Array.prototype.slice.call(arguments),n=document.createDocumentFragment();e.forEach((function(e){var t=e instanceof Node;n.appendChild(t?e:document.createTextNode(String(e)))})),this.appendChild(n)}function n(){this.parentNode&&this.parentNode.removeChild(this)}[Element.prototype,Document.prototype,DocumentFragment.prototype].forEach((function(e){e.hasOwnProperty("append")||Object.defineProperty(e,"append",{configurable:!0,enumerable:!0,writable:!0,value:t});e.hasOwnProperty("remove")||Object.defineProperty(e,"remove",{configurable:!0,enumerable:!0,writable:!0,value:n})}))}()})();
\ No newline at end of file
+(function(){"use strict";!function(){function t(){var e=Array.prototype.slice.call(arguments),n=document.createDocumentFragment();e.forEach((function(e){var t=e instanceof Node;n.appendChild(t?e:document.createTextNode(String(e)))})),this.appendChild(n)}function n(){this.parentNode&&this.parentNode.removeChild(this)}[Element.prototype,Document.prototype,DocumentFragment.prototype].forEach((function(e){e.hasOwnProperty("append")||Object.defineProperty(e,"append",{configurable:!0,enumerable:!0,writable:!0,value:t});e.hasOwnProperty("remove")||Object.defineProperty(e,"remove",{configurable:!0,enumerable:!0,writable:!0,value:n})}))}()})();
\ No newline at end of file
diff --git a/tgui/webpack.config.js b/tgui/webpack.config.js
index d9cce2a63bda..287c4ad2c5bd 100644
--- a/tgui/webpack.config.js
+++ b/tgui/webpack.config.js
@@ -7,7 +7,6 @@
const webpack = require('webpack');
const path = require('path');
const ExtractCssPlugin = require('mini-css-extract-plugin');
-const { createBabelConfig } = require('./babel.config.js');
const createStats = (verbose) => ({
assets: verbose,
@@ -52,12 +51,10 @@ module.exports = (env = {}, argv) => {
rules: [
{
test: /\.([tj]s(x)?|cjs)$/,
+ exclude: /node_modules[\\/]core-js/,
use: [
{
- loader: require.resolve('babel-loader'),
- options: createBabelConfig({
- removeConsole: !bench,
- }),
+ loader: require.resolve('swc-loader'),
},
],
},
@@ -138,6 +135,7 @@ module.exports = (env = {}, argv) => {
new EsbuildPlugin({
target: 'ie11',
css: true,
+ legalComments: 'none',
}),
];
}
diff --git a/tgui/yarn.lock b/tgui/yarn.lock
index cc7164eb6525..2d080fb6ebb5 100644
--- a/tgui/yarn.lock
+++ b/tgui/yarn.lock
@@ -23,14 +23,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.14.7, @babel/compat-data@npm:^7.15.0":
+"@babel/compat-data@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/compat-data@npm:7.15.0"
checksum: 65088d87b14966dcdba397c799f312beb1e7a4dac178e7daa922a17ee9b65d8cfd9f35ff8352ccb6e20bb9a169df1171263ef5fd5967aa25d544ea3f62681993
languageName: node
linkType: hard
-"@babel/core@npm:^7.1.0, @babel/core@npm:^7.15.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5":
+"@babel/core@npm:^7.1.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5":
version: 7.15.0
resolution: "@babel/core@npm:7.15.0"
dependencies:
@@ -53,20 +53,6 @@ __metadata:
languageName: node
linkType: hard
-"@babel/eslint-parser@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/eslint-parser@npm:7.15.0"
- dependencies:
- eslint-scope: ^5.1.1
- eslint-visitor-keys: ^2.1.0
- semver: ^6.3.0
- peerDependencies:
- "@babel/core": ">=7.11.0"
- eslint: ">=7.5.0"
- checksum: fe2a6f59be3bc976b7b01432cab107462b2c8a0af936f4ab0db9ea597df97e6c029fa647ce95505f4b655830bdff42918da0fb6eafbe989aa24f989fed1aa92e
- languageName: node
- linkType: hard
-
"@babel/generator@npm:^7.15.0, @babel/generator@npm:^7.7.2":
version: 7.15.0
resolution: "@babel/generator@npm:7.15.0"
@@ -78,26 +64,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-annotate-as-pure@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-annotate-as-pure@npm:7.14.5"
- dependencies:
- "@babel/types": ^7.14.5
- checksum: 18cefedda60003c2551dabe0e4ad278ef0507682680892c60e9f7cb75ae1dc9a065cddb3ce9964da76f220bf972af5262619eeac4b84c2b8aba1b031961215cc
- languageName: node
- linkType: hard
-
-"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.14.5"
- dependencies:
- "@babel/helper-explode-assignable-expression": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: 0d3571edff0a96d625503a3fd79643f66f8a5204e75c4351276c0d194240e1debe322a70ef9ff47952bd77ac76792f42d732922b00b5bd8b6e2c99909dc4f49b
- languageName: node
- linkType: hard
-
-"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.14.5, @babel/helper-compilation-targets@npm:^7.15.0":
+"@babel/helper-compilation-targets@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-compilation-targets@npm:7.15.0"
dependencies:
@@ -111,61 +78,6 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.14.5, @babel/helper-create-class-features-plugin@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/helper-create-class-features-plugin@npm:7.15.0"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-member-expression-to-functions": ^7.15.0
- "@babel/helper-optimise-call-expression": ^7.14.5
- "@babel/helper-replace-supers": ^7.15.0
- "@babel/helper-split-export-declaration": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: d09136e31fce0c172a36a09532003423b6c263fe1fc51bc3b740fcea5134abed71faab0131b4264890c5cc5ebacbe200c9ba7904bd21a74070adfe46001dd178
- languageName: node
- linkType: hard
-
-"@babel/helper-create-regexp-features-plugin@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.14.5"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- regexpu-core: ^4.7.1
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: c2636d0a6ea6d57eb3603ba9b223fd6ec273a3d8171eb8d84a357ff028cd747ab383b1d7cef84a4df5f9aebb321d43599895f562f3c8aa96314d4847aa59710e
- languageName: node
- linkType: hard
-
-"@babel/helper-define-polyfill-provider@npm:^0.2.2":
- version: 0.2.3
- resolution: "@babel/helper-define-polyfill-provider@npm:0.2.3"
- dependencies:
- "@babel/helper-compilation-targets": ^7.13.0
- "@babel/helper-module-imports": ^7.12.13
- "@babel/helper-plugin-utils": ^7.13.0
- "@babel/traverse": ^7.13.0
- debug: ^4.1.1
- lodash.debounce: ^4.0.8
- resolve: ^1.14.2
- semver: ^6.1.2
- peerDependencies:
- "@babel/core": ^7.4.0-0
- checksum: 797699fe870e45bdbc7c4128963427f7d6240609b700b3f2c0a2f2f187e5f848ba704bcfe58d7d91796cabc5001fae01746b3efda113beb5b5b824927cf59fdb
- languageName: node
- linkType: hard
-
-"@babel/helper-explode-assignable-expression@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-explode-assignable-expression@npm:7.14.5"
- dependencies:
- "@babel/types": ^7.14.5
- checksum: f3b34c54ad26e48e1409f21aaac8ee5b5fa3bd2917ce4df496f57daec12b6132b2d5c2618da807458e97bc2d7894c5bf505cc96789e0c289dcc9948d7844bb03
- languageName: node
- linkType: hard
-
"@babel/helper-function-name@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-function-name@npm:7.14.5"
@@ -204,7 +116,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5":
+"@babel/helper-module-imports@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-module-imports@npm:7.14.5"
dependencies:
@@ -213,7 +125,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.14.5, @babel/helper-module-transforms@npm:^7.15.0":
+"@babel/helper-module-transforms@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-module-transforms@npm:7.15.0"
dependencies:
@@ -238,25 +150,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0":
version: 7.14.5
resolution: "@babel/helper-plugin-utils@npm:7.14.5"
checksum: fe20e90a24d02770a60ebe80ab9f0dfd7258503cea8006c71709ac9af1aa3e47b0de569499673f11ea6c99597f8c0e4880ae1d505986e61101b69716820972fe
languageName: node
linkType: hard
-"@babel/helper-remap-async-to-generator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-remap-async-to-generator@npm:7.14.5"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-wrap-function": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: 022594a15caed0d3bbac52e27eef0f20f9dceb85921b682df55f3bb21dee6fea645b03663e84fdfaadc6b88f4b83b012858520813c15e88728bbc5e16bf3fa29
- languageName: node
- linkType: hard
-
-"@babel/helper-replace-supers@npm:^7.14.5, @babel/helper-replace-supers@npm:^7.15.0":
+"@babel/helper-replace-supers@npm:^7.15.0":
version: 7.15.0
resolution: "@babel/helper-replace-supers@npm:7.15.0"
dependencies:
@@ -277,15 +178,6 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-skip-transparent-expression-wrappers@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.14.5"
- dependencies:
- "@babel/types": ^7.14.5
- checksum: d16937eb08d57d2577902fa6d05ac4b1695602babd9dff9890fa8e56b593fdc997ad24de13fdaf15617036bfacf3493ea569898a5ac0538c2a831aa163f18985
- languageName: node
- linkType: hard
-
"@babel/helper-split-export-declaration@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-split-export-declaration@npm:7.14.5"
@@ -309,965 +201,177 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-wrap-function@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-wrap-function@npm:7.14.5"
- dependencies:
- "@babel/helper-function-name": ^7.14.5
- "@babel/template": ^7.14.5
- "@babel/traverse": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: d5c4bec02396f00d305ae2b60cfa5f3ec27d196a71b88107745b6be4fe257ebe54deedb6ee3997c8c9a2cc5c2571d567c22e9b866109490a2aa7f79a1a2272e2
- languageName: node
- linkType: hard
-
-"@babel/helpers@npm:^7.14.8":
- version: 7.15.3
- resolution: "@babel/helpers@npm:7.15.3"
- dependencies:
- "@babel/template": ^7.14.5
- "@babel/traverse": ^7.15.0
- "@babel/types": ^7.15.0
- checksum: cd70614d610b01189812c83b505b076dca0822df55ed6cd41232416f3a10ae9200a07315683942e0adbc1833481920c2fc7a23a08064ced5a8770259aa0ad707
- languageName: node
- linkType: hard
-
-"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/highlight@npm:7.14.5"
- dependencies:
- "@babel/helper-validator-identifier": ^7.14.5
- chalk: ^2.0.0
- js-tokens: ^4.0.0
- checksum: 4e4b22fb886c939551d73307de16232c186fdb4d8ec8f514541b058feaecdba5234788a0740ca5bcd28777f4108596c39ac4b7463684c63b3812f6071e3fb88f
- languageName: node
- linkType: hard
-
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.5, @babel/parser@npm:^7.15.0, @babel/parser@npm:^7.7.2":
- version: 7.15.3
- resolution: "@babel/parser@npm:7.15.3"
- bin:
- parser: ./bin/babel-parser.js
- checksum: 4b9ba7e8ffe0a3d0dd8c61dee975c79863f7744177de677cb7d12f96549eb5c8b9ffc70ca2b1b2488b06e056da99a6273e2d7d68fc31f498d01483dfac149e13
- languageName: node
- linkType: hard
-
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
- "@babel/plugin-proposal-optional-chaining": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.13.0
- checksum: 17331fd4c1de860ac78aa3195eb5bd058c4eb24a8f2c6e719f079f9c86cbdb53d9a8affc2f9f78b6fc257afef03811922c2d16addad5d5f6224d2820da1c9f45
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-async-generator-functions@npm:^7.14.9":
- version: 7.14.9
- resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.14.9"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-remap-async-to-generator": ^7.14.5
- "@babel/plugin-syntax-async-generators": ^7.8.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 2c03f8ccb8cefc37d62fbd1e5af9570b14df80334f2bb8351381675d6c8f945596479ea51e59478dff9c80e1c234cd1e94675b3b3ccf694e06dde880c78495fa
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-class-properties@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-class-properties@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: fe2aa0a44f8ea121e10c856d6fb4fca418dc42451258ef6ed29321ca740080fba420ebd3d6700d0456c34c2ab2044f9ce4308498321f52a93184ff5adb015aae
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-class-static-block@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-class-static-block@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-class-static-block": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.12.0
- checksum: 0275d0643dacd08638c2d3c129158ad0c2dea6a26e78fa4b2129811a29460ff9a6459d1955a19bfa3b9ed67ba2bb3c88676823ad207b2de4f0c65e0c3751d75c
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-dynamic-import@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-dynamic-import@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-dynamic-import": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 47be4b5f8824f8690b47d99a34d52de0e6c19d0b99f26c1f9a2e4cc49e05082bcef7248c610bb3830ae84cec928713c7774f4929fca4fa72df570df7a76a9d2b
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-export-namespace-from@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-export-namespace-from": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: b3f4e0cc196f7ad9132816bb350124e8932bc047ab946e431f85bae9649b0de384c54261a60c050a2b8220703408fc089f90349ad008ed69a70944a6f3048d0e
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-json-strings@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-json-strings@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-json-strings": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 51dafe70237860569c9c27dc6a0db83e149bf7babb0fcafa9dbcd55a960b443f7b5bb695956c6e116e46b3dbd2a6777ead62bcad843aff8c1916c1be56e2f504
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-logical-assignment-operators@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 08b6dbc991c4824b0d8bfabf46c8254fce02d2df04627b8849cf15a4b6de75629c10c7c83d1e6834cdcebfc98b16264ce2dd32aa9c0fae900ed2af807d5ac42b
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 033d9483c2feb74928fbb83a73948eb1179c8852d2ae507fbfc37752d2dbf702c9ad0daaf1eaa029f81b12b7e2470061b4f611db88b7293f0e9a71eba288a430
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-numeric-separator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-numeric-separator@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-numeric-separator": ^7.10.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 22093297ec9aed3938b39f4efa1b518252fe7b0835902c3066f0ae6a864ac253b986a4a21a6092aa068d0702d7b09bed74e56cf39f2da8b4f3f43e0747bffb62
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-object-rest-spread@npm:^7.14.7":
- version: 7.14.7
- resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.14.7"
- dependencies:
- "@babel/compat-data": ^7.14.7
- "@babel/helper-compilation-targets": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-object-rest-spread": ^7.8.3
- "@babel/plugin-transform-parameters": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: a35192868166fb5a62003a56ce2c266f74ae680f1d9589652c4495145240dd138a9505301bb5adca069cb874d6f0f733dc2f3d1d05f71a06019735c29c4d1a11
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-optional-catch-binding@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: f9c1b2b34fef1bde85feeb0b438131f526056161e10b6fb91c74a5828ad39d2a20521b5c3cefc7367a7e5fc792b7c7e607bf278d7999b5d89824c34af3174eae
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-optional-chaining@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-optional-chaining@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
- "@babel/plugin-syntax-optional-chaining": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 9e39e20d162bea2241b4c24ea8a339f872a04954a5155c606bf2437edaa1a15b8a517daee4b2b09cfd42d826b93c57f080aa9fbb13c60a8f3a7a72963badf2df
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-private-methods@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-private-methods@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: badacc1d68c8cf92a7ba973e3c283bc3aebf586a6573b6d18a96461ce18039d4cdc0135edac1b810df8d92cfca628115d98a0ad83ed8f15bf15eaff21539bf32
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-private-property-in-object@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.14.5"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-private-property-in-object": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: a11da6a52eb13d6dcb6ed36993a81e9746404f6e83d32be16142911b7e5768293d8c4c5373d182ef25cb94d0b18c0c27a07f4553be042ee2dc49f7179f8cbfe2
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-unicode-property-regex@npm:^7.14.5, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.14.5"
- dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 58bd3277a972a33d101d29ab4f52e964b6e8ec218eb84f764b4ea67bf8ed362909760812d3f7451ee5e54dc273bd81bc5a00cd2c13e8fb64a47ec117cb69d51b
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-async-generators@npm:^7.8.4":
- version: 7.8.4
- resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-bigint@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-bigint@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3":
- version: 7.12.13
- resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13"
- dependencies:
- "@babel/helper-plugin-utils": ^7.12.13
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-class-static-block@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-dynamic-import@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-import-meta@npm:^7.8.3":
- version: 7.10.4
- resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
- dependencies:
- "@babel/helper-plugin-utils": ^7.10.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-json-strings@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-jsx@npm:^7":
- version: 7.12.13
- resolution: "@babel/plugin-syntax-jsx@npm:7.12.13"
- dependencies:
- "@babel/helper-plugin-utils": ^7.12.13
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 30697ad4607a9339b06c2648c2d128ce6865c3d2d14049b422c5ca060d6532978bb1008e086df402d365fda04fbafe9bd4ad9f62d78ef2e7a7063459b59645c0
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3":
- version: 7.10.4
- resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
- dependencies:
- "@babel/helper-plugin-utils": ^7.10.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3":
- version: 7.10.4
- resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4"
- dependencies:
- "@babel/helper-plugin-utils": ^7.10.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-optional-chaining@npm:^7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-typescript@npm:^7.14.5, @babel/plugin-syntax-typescript@npm:^7.7.2":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-typescript@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 5447d13b31aeeeaa5c2b945e60a598642dedca480f11d3232b0927aeb6a6bb8201a0025f509bc23851da4bf126f69b0522790edbd58f4560f0a4984cabd0d126
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-arrow-functions@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-arrow-functions@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 126196ea0107e97f711c0d48d8d1e01a30f5a5e127628f7367658b4c5832182c4e28914294408374690c5bfbb4ad4fe6560068d8bf370cafe8d4fe23599aaa95
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-async-to-generator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-async-to-generator@npm:7.14.5"
- dependencies:
- "@babel/helper-module-imports": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-remap-async-to-generator": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 4c47016c5f65adaa5836054fcc99402f1d295aedd7ebd44e6df128a90977952f2a8abdf3b3d0aa5a9e1186184da538452c4d9a3b1482376759c6962627201da5
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-block-scoped-functions@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 9994d9f107308b21be043de115fe1d06956807d93a3039ddab54333d1fbb39ad50cc5f9eccaedf5317f4699230e923662254974f3a974c4f000e986837bc020a
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-block-scoping@npm:^7.14.5":
- version: 7.15.3
- resolution: "@babel/plugin-transform-block-scoping@npm:7.15.3"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: ee28f51711b5f6569a9bb86be5b2a5456f3e6e22e68488ee77f8082fae5563f45c858dc8323e0e51085d880db1be73e28dc5d108c8a855c831fb29310a01b549
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-classes@npm:^7.14.9":
- version: 7.14.9
- resolution: "@babel/plugin-transform-classes@npm:7.14.9"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-optimise-call-expression": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-replace-supers": ^7.14.5
- "@babel/helper-split-export-declaration": ^7.14.5
- globals: ^11.1.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 9cb8e78b1249734de6d518a5e63fe429beed9d096298cd79cd1bd36836704cc3644d889d762ce079077bc007dbe4c950d66a58456d9472a123ab3c1100cff7b2
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-computed-properties@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-computed-properties@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 87bd4c46255359ab8d53d0e9b5aa5e1ef218c1447874bd8c2eff759d3a2b5fe6b3ec55046babe0087f7e3890f6167524c729737e912080ea1c9758a559765130
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-destructuring@npm:^7.14.7":
- version: 7.14.7
- resolution: "@babel/plugin-transform-destructuring@npm:7.14.7"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 0b0cf8ed9fb92c53e3888c17402c4f1e8f329f05a759829b559df883b19b442d3950b7f319df419d0cff122ea76fc8b3b55779fdbb9e394e5f058419a8d5ba14
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-dotall-regex@npm:^7.14.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4":
- version: 7.14.5
- resolution: "@babel/plugin-transform-dotall-regex@npm:7.14.5"
- dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 4da3dac9580823c1fe8aaedf6109d3a26d17ad7ef7d1b278ddbcd7c148e02c465cf49250794529a34bac0bda6b53db558ae08d185a96b76efaaa17a5da3911df
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-duplicate-keys@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-duplicate-keys@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: c6c951d2f7ed528a8103d08293d4aaf95efa38c697e7b2b27b7e6c9780280484373e2f7ef8d77daf17dffdc86748fbf75e776e0542b1c7b17e29308bc31ebd8c
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-exponentiation-operator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.14.5"
- dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 7588a582d0bc5c80fda7f1c631354a35a9a7d284dd80ccaf2bbfd086a39a9d6461718dc7dd45a3ca59228593270a7c6a907a9cbe7ddc349d80c7342af0263c5c
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-for-of@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-for-of@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: aeb76eb11d10b2390996001e2fd529bbaf3695edd306d24e4eba87b8137c10a6afda3896017f88fcf40fd2334cc424c0a111fad34e10c747e81e577e5957e328
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-function-name@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-function-name@npm:7.14.5"
- dependencies:
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3db2fa1bcd21b76a91ce78db8ebca047fdadbf198f816e2621e531a751a0d40976cf2a25262dee9352fd0c53bff5b25fddefadebdbb4ba3da6d89b849ab075b6
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-jscript@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-jscript@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 1f1faa800f705e6cd3a3dc6d12422d63278e09c2117f06584d1f8f69b9e07510ff7dbd659078c6c9dd094975cfb5d8780eb82dfe6acded1ce973c9f104537c76
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-literals@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-literals@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 2341cfaaf8ac7199c578407ea4de41205d3d74c5a48899aa96c41b08c09d18c46d9018fdc6a2f69f0bccc2662223afc47b60130ae4ff36a79351fface71a61f3
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-member-expression-literals@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-member-expression-literals@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: a94ff910e8d0e28effd58c64f2d15c9772ea4c209644f116fd81dc5c93ce232304f42ef14d5ec2baf095c824786698fcf6c1d4c91952dc3762350f4ec0eb1f17
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-modules-amd@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-amd@npm:7.14.5"
- dependencies:
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- babel-plugin-dynamic-import-node: ^2.3.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 963d9ebb11b282d5c5f462e3e1ad6991e60fb4d190b5a7aa0d9937e0fa83d89cf5f94268f0b0b343576f2cee0cf545bcaf40da40eb8b9dca5c79840fd86a65ed
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-modules-commonjs@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.15.0"
- dependencies:
- "@babel/helper-module-transforms": ^7.15.0
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-simple-access": ^7.14.8
- babel-plugin-dynamic-import-node: ^2.3.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: ef55fb736cc8dd984d1a39a74a108b0c52326e93c2e94264da2800ba7027369b64c5d4bd67f274d5386d5346beec264bd8d52e4f1fe6b59802984472e28e4f68
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-modules-systemjs@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-systemjs@npm:7.14.5"
- dependencies:
- "@babel/helper-hoist-variables": ^7.14.5
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-identifier": ^7.14.5
- babel-plugin-dynamic-import-node: ^2.3.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3ca0bb1c0c22a3d705476186afa9fc86398ae4662afc259ff29c1942e3c8770f4bdadaf67418a21816964d4e1eaf07412eeabccccfaa9d45eac735f971ad148b
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-modules-umd@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-umd@npm:7.14.5"
- dependencies:
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 455ff383bed47e104d4b2b32f11bc5a44a25c797fad26b5eab9b8a81856f9945350b45ad28b9b20b0bbf324832c7a826c9c3d6f865e85c26a1771663132e4145
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.14.9":
- version: 7.14.9
- resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.14.9"
- dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: 81dda376c0af4c07ae252703481e8bd16d49045bd624697ff6b6635326f3f20fca9c574a2f0036bf7f4aa8c36baa9d926912538de486a189a3515bec7f72e16a
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-new-target@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-new-target@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 5b806c86926cd0b03fa2f22cf21a6d6a86e5831b80e8a1e898877acd3a03fd07078e45da33b671200ec98a5c7ac9be2f3592cd88933e262feffba248ca7ca4e7
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-object-super@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-object-super@npm:7.14.5"
+"@babel/helpers@npm:^7.14.8":
+ version: 7.15.3
+ resolution: "@babel/helpers@npm:7.15.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-replace-supers": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 88477a8b27e76042ffbff1345088422f5b3135346d69f264e71d90b3749a3d73d5a579c97a33cd11c61c5d499a655911c7cd97dbe68edb36e090dfd5f154d777
+ "@babel/template": ^7.14.5
+ "@babel/traverse": ^7.15.0
+ "@babel/types": ^7.15.0
+ checksum: cd70614d610b01189812c83b505b076dca0822df55ed6cd41232416f3a10ae9200a07315683942e0adbc1833481920c2fc7a23a08064ced5a8770259aa0ad707
languageName: node
linkType: hard
-"@babel/plugin-transform-parameters@npm:^7.14.5":
+"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.14.5":
version: 7.14.5
- resolution: "@babel/plugin-transform-parameters@npm:7.14.5"
+ resolution: "@babel/highlight@npm:7.14.5"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 932bc616be7b5542ba2371c85cfcc579a8556b9e5a5ea5535b7f0ec5b68284ed2a3724ae181f1a22719b5ea6539c82f5fcee37d9f45f08ed72eb9e43a0940b56
+ "@babel/helper-validator-identifier": ^7.14.5
+ chalk: ^2.0.0
+ js-tokens: ^4.0.0
+ checksum: 4e4b22fb886c939551d73307de16232c186fdb4d8ec8f514541b058feaecdba5234788a0740ca5bcd28777f4108596c39ac4b7463684c63b3812f6071e3fb88f
languageName: node
linkType: hard
-"@babel/plugin-transform-property-literals@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-property-literals@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 426e7b13a048220314e35bd4e6732640293c616173ef05ceca3a2bfadd043199e35ec693f1604f77178c3a88bea241b6d7ce92d8fc837faeb37117ad7866350f
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.5, @babel/parser@npm:^7.15.0, @babel/parser@npm:^7.7.2":
+ version: 7.15.3
+ resolution: "@babel/parser@npm:7.15.3"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: 4b9ba7e8ffe0a3d0dd8c61dee975c79863f7744177de677cb7d12f96549eb5c8b9ffc70ca2b1b2488b06e056da99a6273e2d7d68fc31f498d01483dfac149e13
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-regenerator@npm:7.14.5"
+"@babel/plugin-syntax-async-generators@npm:^7.8.4":
+ version: 7.8.4
+ resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
dependencies:
- regenerator-transform: ^0.14.2
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f606bc04da7d0cfd651914cb144e85a0ea6fe20ee453ed21d002747cc47b09c853bc97166c32dc47e959581b772d9883f7d96d1c8e795c81ed21dbbb300e3aa7
+ checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367
languageName: node
linkType: hard
-"@babel/plugin-transform-reserved-words@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-reserved-words@npm:7.14.5"
+"@babel/plugin-syntax-bigint@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-bigint@npm:7.8.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 8a40d7b48e1b4a549272d603e7b28ead70213e12353d65edd07156b7169d7933cee8b79987b54f374f3c41b835d941aca4b13b8aa23a922c94113af2131ca686
+ checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-shorthand-properties@npm:7.14.5"
+"@babel/plugin-syntax-class-properties@npm:^7.8.3":
+ version: 7.12.13
+ resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.12.13
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 60cdd17e347a6a0973c8ea5c08ae4b3f8e59ce0e188453c4bda045d2a5c34495af8e0e9393631aa9f3fd51282455b9c5d6ba07e262576171dbe2b4094bdaf8ad
+ checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.14.6":
- version: 7.14.6
- resolution: "@babel/plugin-transform-spread@npm:7.14.6"
+"@babel/plugin-syntax-import-meta@npm:^7.8.3":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 20c11de962dd7ddab110d6c4ab9f3c0bea97393ce09cbe4e46be53182c3df0577eaf0e31aaa2d76344ae21ed3a3b7e779fe814b845d188e11a6031c619648b89
+ checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-sticky-regex@npm:7.14.5"
+"@babel/plugin-syntax-json-strings@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 6d77e0641c4c72203d592d54fdb11770de22a34d659d3335e4c537e95b930d03142b11f1d41d103da3de063c628a0f34bdd4c6534b591bc59d9ce67fafb836dc
+ checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-template-literals@npm:7.14.5"
+"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 56d273470c16e83bac1bfab5057a64f23191b51460a009b522b3b29806d7a9f64cbd94323836ceb997c4f331b85564f952eb5566c7bd140d0b278f0191a31985
+ checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.14.5"
+"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1e71ec00ea8b64522b8677c030f334cc5b3833a5b7269a152a2ba7a6b36f0e0a4333a61072e69113e4062e71554d4751ef2e3ddd5e81994978123323f266981c
+ checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1
languageName: node
linkType: hard
-"@babel/plugin-transform-typescript@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/plugin-transform-typescript@npm:7.15.0"
+"@babel/plugin-syntax-numeric-separator@npm:^7.8.3":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.15.0
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-typescript": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ec94df8917879c3ef908a20cf9e73ab3379074f7a972a615a8248af29d35d0a145b32feb70e610ac59548947996b6ec3135f4663ed26c7396013424a171e4635
+ checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-escapes@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-unicode-escapes@npm:7.14.5"
+"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2a6979c5b886d9c7d9d3887374d75384542fe05a71eb7738b2cde659386089a930d37d1a34ffb4b87def98fbed3526d78b7cd5dd9bffde4d406b368faba81b7d
+ checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-unicode-regex@npm:7.14.5"
+"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1b7a4c0dc6b07390f991e7cac8409f7a1ae74495d94b9e1fb5a716d5362a349a35717cfad883074e3f80e16bb630bbd1986a3436f739f6b01c30a96ef3f9ea9a
+ checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9
languageName: node
linkType: hard
-"@babel/preset-env@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/preset-env@npm:7.15.0"
+"@babel/plugin-syntax-optional-chaining@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3"
dependencies:
- "@babel/compat-data": ^7.15.0
- "@babel/helper-compilation-targets": ^7.15.0
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-option": ^7.14.5
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.14.5
- "@babel/plugin-proposal-async-generator-functions": ^7.14.9
- "@babel/plugin-proposal-class-properties": ^7.14.5
- "@babel/plugin-proposal-class-static-block": ^7.14.5
- "@babel/plugin-proposal-dynamic-import": ^7.14.5
- "@babel/plugin-proposal-export-namespace-from": ^7.14.5
- "@babel/plugin-proposal-json-strings": ^7.14.5
- "@babel/plugin-proposal-logical-assignment-operators": ^7.14.5
- "@babel/plugin-proposal-nullish-coalescing-operator": ^7.14.5
- "@babel/plugin-proposal-numeric-separator": ^7.14.5
- "@babel/plugin-proposal-object-rest-spread": ^7.14.7
- "@babel/plugin-proposal-optional-catch-binding": ^7.14.5
- "@babel/plugin-proposal-optional-chaining": ^7.14.5
- "@babel/plugin-proposal-private-methods": ^7.14.5
- "@babel/plugin-proposal-private-property-in-object": ^7.14.5
- "@babel/plugin-proposal-unicode-property-regex": ^7.14.5
- "@babel/plugin-syntax-async-generators": ^7.8.4
- "@babel/plugin-syntax-class-properties": ^7.12.13
- "@babel/plugin-syntax-class-static-block": ^7.14.5
- "@babel/plugin-syntax-dynamic-import": ^7.8.3
- "@babel/plugin-syntax-export-namespace-from": ^7.8.3
- "@babel/plugin-syntax-json-strings": ^7.8.3
- "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
- "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
- "@babel/plugin-syntax-numeric-separator": ^7.10.4
- "@babel/plugin-syntax-object-rest-spread": ^7.8.3
- "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
- "@babel/plugin-syntax-optional-chaining": ^7.8.3
- "@babel/plugin-syntax-private-property-in-object": ^7.14.5
- "@babel/plugin-syntax-top-level-await": ^7.14.5
- "@babel/plugin-transform-arrow-functions": ^7.14.5
- "@babel/plugin-transform-async-to-generator": ^7.14.5
- "@babel/plugin-transform-block-scoped-functions": ^7.14.5
- "@babel/plugin-transform-block-scoping": ^7.14.5
- "@babel/plugin-transform-classes": ^7.14.9
- "@babel/plugin-transform-computed-properties": ^7.14.5
- "@babel/plugin-transform-destructuring": ^7.14.7
- "@babel/plugin-transform-dotall-regex": ^7.14.5
- "@babel/plugin-transform-duplicate-keys": ^7.14.5
- "@babel/plugin-transform-exponentiation-operator": ^7.14.5
- "@babel/plugin-transform-for-of": ^7.14.5
- "@babel/plugin-transform-function-name": ^7.14.5
- "@babel/plugin-transform-literals": ^7.14.5
- "@babel/plugin-transform-member-expression-literals": ^7.14.5
- "@babel/plugin-transform-modules-amd": ^7.14.5
- "@babel/plugin-transform-modules-commonjs": ^7.15.0
- "@babel/plugin-transform-modules-systemjs": ^7.14.5
- "@babel/plugin-transform-modules-umd": ^7.14.5
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.14.9
- "@babel/plugin-transform-new-target": ^7.14.5
- "@babel/plugin-transform-object-super": ^7.14.5
- "@babel/plugin-transform-parameters": ^7.14.5
- "@babel/plugin-transform-property-literals": ^7.14.5
- "@babel/plugin-transform-regenerator": ^7.14.5
- "@babel/plugin-transform-reserved-words": ^7.14.5
- "@babel/plugin-transform-shorthand-properties": ^7.14.5
- "@babel/plugin-transform-spread": ^7.14.6
- "@babel/plugin-transform-sticky-regex": ^7.14.5
- "@babel/plugin-transform-template-literals": ^7.14.5
- "@babel/plugin-transform-typeof-symbol": ^7.14.5
- "@babel/plugin-transform-unicode-escapes": ^7.14.5
- "@babel/plugin-transform-unicode-regex": ^7.14.5
- "@babel/preset-modules": ^0.1.4
- "@babel/types": ^7.15.0
- babel-plugin-polyfill-corejs2: ^0.2.2
- babel-plugin-polyfill-corejs3: ^0.2.2
- babel-plugin-polyfill-regenerator: ^0.2.2
- core-js-compat: ^3.16.0
- semver: ^6.3.0
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 22768426910f23d288b3ef280c89b64e36bebfc236e08d6989294a242c4f6844aa1d3f0d64f57f1c2850ce25bfa886b9ad060a62d25f18cff1673d22b0e6727d
+ checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30
languageName: node
linkType: hard
-"@babel/preset-modules@npm:^0.1.4":
- version: 0.1.4
- resolution: "@babel/preset-modules@npm:0.1.4"
+"@babel/plugin-syntax-top-level-await@npm:^7.8.3":
+ version: 7.14.5
+ resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5"
dependencies:
- "@babel/helper-plugin-utils": ^7.0.0
- "@babel/plugin-proposal-unicode-property-regex": ^7.4.4
- "@babel/plugin-transform-dotall-regex": ^7.4.4
- "@babel/types": ^7.4.4
- esutils: ^2.0.2
+ "@babel/helper-plugin-utils": ^7.14.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7c6500be06be9a341e377eb63292a4a22d0da2b4fb8c68714aff703ddb341cbd58e37d4119d64fc3e602f73801103af471fca2c60b4c1e48e08eea3e6b1afc93
+ checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e
languageName: node
linkType: hard
-"@babel/preset-typescript@npm:^7.15.0":
- version: 7.15.0
- resolution: "@babel/preset-typescript@npm:7.15.0"
+"@babel/plugin-syntax-typescript@npm:^7.7.2":
+ version: 7.14.5
+ resolution: "@babel/plugin-syntax-typescript@npm:7.14.5"
dependencies:
"@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-option": ^7.14.5
- "@babel/plugin-transform-typescript": ^7.15.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2c480bb0ef76418357d92ccfae67df544a069ca8f59785e8bd0d1d3111bfc671f9f04672583506f1ee62afc3872bf21ed85d6d0c97ba1bc09a6efd1f7c20a10f
- languageName: node
- linkType: hard
-
-"@babel/runtime@npm:^7.8.4":
- version: 7.15.3
- resolution: "@babel/runtime@npm:7.15.3"
- dependencies:
- regenerator-runtime: ^0.13.4
- checksum: 2f0b8d2d4e36035ab1d84af0ec26aafa098536870f27c8e07de0a0e398f7a394fdea68a88165535ffb52ded6a68912bdc3450bdf91f229eb132e1c89470789f5
+ checksum: 5447d13b31aeeeaa5c2b945e60a598642dedca480f11d3232b0927aeb6a6bb8201a0025f509bc23851da4bf126f69b0522790edbd58f4560f0a4984cabd0d126
languageName: node
linkType: hard
@@ -1282,7 +386,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.5, @babel/traverse@npm:^7.15.0, @babel/traverse@npm:^7.7.2":
+"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.15.0, @babel/traverse@npm:^7.7.2":
version: 7.15.0
resolution: "@babel/traverse@npm:7.15.0"
dependencies:
@@ -1299,7 +403,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7, @babel/types@npm:^7.0.0, @babel/types@npm:^7.14.5, @babel/types@npm:^7.14.8, @babel/types@npm:^7.15.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.14.5, @babel/types@npm:^7.14.8, @babel/types@npm:^7.15.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3":
version: 7.15.0
resolution: "@babel/types@npm:7.15.0"
dependencies:
@@ -1604,6 +708,15 @@ __metadata:
languageName: node
linkType: hard
+"@jest/create-cache-key-function@npm:^29.7.0":
+ version: 29.7.0
+ resolution: "@jest/create-cache-key-function@npm:29.7.0"
+ dependencies:
+ "@jest/types": ^29.6.3
+ checksum: 681bc761fa1d6fa3dd77578d444f97f28296ea80755e90e46d1c8fa68661b9e67f54dd38b988742db636d26cf160450dc6011892cec98b3a7ceb58cad8ff3aae
+ languageName: node
+ linkType: hard
+
"@jest/environment@npm:^27.0.6":
version: 27.0.6
resolution: "@jest/environment@npm:27.0.6"
@@ -1678,6 +791,15 @@ __metadata:
languageName: node
linkType: hard
+"@jest/schemas@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/schemas@npm:29.6.3"
+ dependencies:
+ "@sinclair/typebox": ^0.27.8
+ checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93
+ languageName: node
+ linkType: hard
+
"@jest/source-map@npm:^27.0.6":
version: 27.0.6
resolution: "@jest/source-map@npm:27.0.6"
@@ -1749,6 +871,72 @@ __metadata:
languageName: node
linkType: hard
+"@jest/types@npm:^29.6.3":
+ version: 29.6.3
+ resolution: "@jest/types@npm:29.6.3"
+ dependencies:
+ "@jest/schemas": ^29.6.3
+ "@types/istanbul-lib-coverage": ^2.0.0
+ "@types/istanbul-reports": ^3.0.0
+ "@types/node": "*"
+ "@types/yargs": ^17.0.8
+ chalk: ^4.0.0
+ checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc
+ languageName: node
+ linkType: hard
+
+"@jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+ dependencies:
+ "@jridgewell/set-array": ^1.2.1
+ "@jridgewell/sourcemap-codec": ^1.4.10
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
+ languageName: node
+ linkType: hard
+
+"@jridgewell/resolve-uri@npm:^3.1.0":
+ version: 3.1.2
+ resolution: "@jridgewell/resolve-uri@npm:3.1.2"
+ checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870
+ languageName: node
+ linkType: hard
+
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
+ languageName: node
+ linkType: hard
+
+"@jridgewell/source-map@npm:^0.3.3":
+ version: 0.3.6
+ resolution: "@jridgewell/source-map@npm:0.3.6"
+ dependencies:
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30
+ languageName: node
+ linkType: hard
+
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
+ version: 1.4.15
+ resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
+ checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
+ languageName: node
+ linkType: hard
+
+"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+ dependencies:
+ "@jridgewell/resolve-uri": ^3.1.0
+ "@jridgewell/sourcemap-codec": ^1.4.14
+ checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
+ languageName: node
+ linkType: hard
+
"@nodelib/fs.scandir@npm:2.1.4":
version: 2.1.4
resolution: "@nodelib/fs.scandir@npm:2.1.4"
@@ -1759,62 +947,214 @@ __metadata:
languageName: node
linkType: hard
-"@nodelib/fs.stat@npm:2.0.4, @nodelib/fs.stat@npm:^2.0.2":
- version: 2.0.4
- resolution: "@nodelib/fs.stat@npm:2.0.4"
- checksum: d0d9745f878816d041a8b36faf5797d88ba961274178f0ad1f7fe0efef8118ca9bd0e43e4d0d85a9af911bd35122ec1580e626a83d7595fc4d60f2c1c70e2665
+"@nodelib/fs.stat@npm:2.0.4, @nodelib/fs.stat@npm:^2.0.2":
+ version: 2.0.4
+ resolution: "@nodelib/fs.stat@npm:2.0.4"
+ checksum: d0d9745f878816d041a8b36faf5797d88ba961274178f0ad1f7fe0efef8118ca9bd0e43e4d0d85a9af911bd35122ec1580e626a83d7595fc4d60f2c1c70e2665
+ languageName: node
+ linkType: hard
+
+"@nodelib/fs.walk@npm:^1.2.3":
+ version: 1.2.6
+ resolution: "@nodelib/fs.walk@npm:1.2.6"
+ dependencies:
+ "@nodelib/fs.scandir": 2.1.4
+ fastq: ^1.6.0
+ checksum: d156901823b3d3de368ad68047a964523e0ce5f796c0aa7712443b1f748d8e7fc24ce2c0f18d22a177e1f1c6092bca609ab5e4cb1792c41cdc8a6989bc391139
+ languageName: node
+ linkType: hard
+
+"@npmcli/move-file@npm:^1.0.1":
+ version: 1.1.2
+ resolution: "@npmcli/move-file@npm:1.1.2"
+ dependencies:
+ mkdirp: ^1.0.4
+ rimraf: ^3.0.2
+ checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7
+ languageName: node
+ linkType: hard
+
+"@polka/url@npm:^1.0.0-next.9":
+ version: 1.0.0-next.11
+ resolution: "@polka/url@npm:1.0.0-next.11"
+ checksum: db1626fb6d7167ce2de6223c95f0a5ff8e1e7c56b2e8709f904f219d8fcc7b075de842ea8bf0ed7af9f5bc350b166b286b241636982f10d0f02964f34215a0e0
+ languageName: node
+ linkType: hard
+
+"@popperjs/core@npm:^2.9.3":
+ version: 2.9.3
+ resolution: "@popperjs/core@npm:2.9.3"
+ checksum: 4cb94c271eaa13416ab8169c6af778c5b6160614351a79c68e8219d6ee0a40b8f71080ca29e139591c7c0c8e08fc1627d0e18d40a64609713a42b58d683a009d
+ languageName: node
+ linkType: hard
+
+"@sinclair/typebox@npm:^0.27.8":
+ version: 0.27.8
+ resolution: "@sinclair/typebox@npm:0.27.8"
+ checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1
+ languageName: node
+ linkType: hard
+
+"@sinonjs/commons@npm:^1.7.0":
+ version: 1.8.2
+ resolution: "@sinonjs/commons@npm:1.8.2"
+ dependencies:
+ type-detect: 4.0.8
+ checksum: 67aa47d4a19e688da5c291286786635625356d6dc379d86f255c8425b9da3dfd26d07cfef82aad755ad51bd1a889bde07abd1e1592f9f5b3e29013045738e344
+ languageName: node
+ linkType: hard
+
+"@sinonjs/fake-timers@npm:^7.0.2":
+ version: 7.1.2
+ resolution: "@sinonjs/fake-timers@npm:7.1.2"
+ dependencies:
+ "@sinonjs/commons": ^1.7.0
+ checksum: c84773d7973edad5511a31d2cc75023447b5cf714a84de9bb50eda45dda88a0d3bd2c30bf6e6e936da50a048d5352e2151c694e13e59b97d187ba1f329e9a00c
+ languageName: node
+ linkType: hard
+
+"@swc/core-darwin-arm64@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-darwin-arm64@npm:1.5.24"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@swc/core-darwin-x64@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-darwin-x64@npm:1.5.24"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm-gnueabihf@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-linux-arm-gnueabihf@npm:1.5.24"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm64-gnu@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-linux-arm64-gnu@npm:1.5.24"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-arm64-musl@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-linux-arm64-musl@npm:1.5.24"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-x64-gnu@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-linux-x64-gnu@npm:1.5.24"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@swc/core-linux-x64-musl@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-linux-x64-musl@npm:1.5.24"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@swc/core-win32-arm64-msvc@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-win32-arm64-msvc@npm:1.5.24"
+ conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@nodelib/fs.walk@npm:^1.2.3":
- version: 1.2.6
- resolution: "@nodelib/fs.walk@npm:1.2.6"
- dependencies:
- "@nodelib/fs.scandir": 2.1.4
- fastq: ^1.6.0
- checksum: d156901823b3d3de368ad68047a964523e0ce5f796c0aa7712443b1f748d8e7fc24ce2c0f18d22a177e1f1c6092bca609ab5e4cb1792c41cdc8a6989bc391139
+"@swc/core-win32-ia32-msvc@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-win32-ia32-msvc@npm:1.5.24"
+ conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@npmcli/move-file@npm:^1.0.1":
- version: 1.1.2
- resolution: "@npmcli/move-file@npm:1.1.2"
- dependencies:
- mkdirp: ^1.0.4
- rimraf: ^3.0.2
- checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7
+"@swc/core-win32-x64-msvc@npm:1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core-win32-x64-msvc@npm:1.5.24"
+ conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
-"@polka/url@npm:^1.0.0-next.9":
- version: 1.0.0-next.11
- resolution: "@polka/url@npm:1.0.0-next.11"
- checksum: db1626fb6d7167ce2de6223c95f0a5ff8e1e7c56b2e8709f904f219d8fcc7b075de842ea8bf0ed7af9f5bc350b166b286b241636982f10d0f02964f34215a0e0
+"@swc/core@npm:^1.5.24":
+ version: 1.5.24
+ resolution: "@swc/core@npm:1.5.24"
+ dependencies:
+ "@swc/core-darwin-arm64": 1.5.24
+ "@swc/core-darwin-x64": 1.5.24
+ "@swc/core-linux-arm-gnueabihf": 1.5.24
+ "@swc/core-linux-arm64-gnu": 1.5.24
+ "@swc/core-linux-arm64-musl": 1.5.24
+ "@swc/core-linux-x64-gnu": 1.5.24
+ "@swc/core-linux-x64-musl": 1.5.24
+ "@swc/core-win32-arm64-msvc": 1.5.24
+ "@swc/core-win32-ia32-msvc": 1.5.24
+ "@swc/core-win32-x64-msvc": 1.5.24
+ "@swc/counter": ^0.1.3
+ "@swc/types": ^0.1.7
+ peerDependencies:
+ "@swc/helpers": "*"
+ dependenciesMeta:
+ "@swc/core-darwin-arm64":
+ optional: true
+ "@swc/core-darwin-x64":
+ optional: true
+ "@swc/core-linux-arm-gnueabihf":
+ optional: true
+ "@swc/core-linux-arm64-gnu":
+ optional: true
+ "@swc/core-linux-arm64-musl":
+ optional: true
+ "@swc/core-linux-x64-gnu":
+ optional: true
+ "@swc/core-linux-x64-musl":
+ optional: true
+ "@swc/core-win32-arm64-msvc":
+ optional: true
+ "@swc/core-win32-ia32-msvc":
+ optional: true
+ "@swc/core-win32-x64-msvc":
+ optional: true
+ peerDependenciesMeta:
+ "@swc/helpers":
+ optional: true
+ checksum: eafbcf5ea93540dc7cb0802c8ae8df5e995f586611195647e70d966bb6407e8233d31c3d954da58eb158a0c9a57d9207e52bb1518579de64cd34b67b025acc14
languageName: node
linkType: hard
-"@popperjs/core@npm:^2.9.3":
- version: 2.9.3
- resolution: "@popperjs/core@npm:2.9.3"
- checksum: 4cb94c271eaa13416ab8169c6af778c5b6160614351a79c68e8219d6ee0a40b8f71080ca29e139591c7c0c8e08fc1627d0e18d40a64609713a42b58d683a009d
+"@swc/counter@npm:^0.1.3":
+ version: 0.1.3
+ resolution: "@swc/counter@npm:0.1.3"
+ checksum: df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598
languageName: node
linkType: hard
-"@sinonjs/commons@npm:^1.7.0":
- version: 1.8.2
- resolution: "@sinonjs/commons@npm:1.8.2"
+"@swc/jest@npm:^0.2.36":
+ version: 0.2.36
+ resolution: "@swc/jest@npm:0.2.36"
dependencies:
- type-detect: 4.0.8
- checksum: 67aa47d4a19e688da5c291286786635625356d6dc379d86f255c8425b9da3dfd26d07cfef82aad755ad51bd1a889bde07abd1e1592f9f5b3e29013045738e344
+ "@jest/create-cache-key-function": ^29.7.0
+ "@swc/counter": ^0.1.3
+ jsonc-parser: ^3.2.0
+ peerDependencies:
+ "@swc/core": "*"
+ checksum: 14f2e696ac093e23dae1e2e57d894bbcde4de6fe80341a26c8d0d8cbae5aae31832f8fa32dc698529f128d19a76aeedf2227f59480de6dab5eb3f30bfdf9b71a
languageName: node
linkType: hard
-"@sinonjs/fake-timers@npm:^7.0.2":
- version: 7.1.2
- resolution: "@sinonjs/fake-timers@npm:7.1.2"
+"@swc/types@npm:^0.1.7":
+ version: 0.1.7
+ resolution: "@swc/types@npm:0.1.7"
dependencies:
- "@sinonjs/commons": ^1.7.0
- checksum: c84773d7973edad5511a31d2cc75023447b5cf714a84de9bb50eda45dda88a0d3bd2c30bf6e6e936da50a048d5352e2151c694e13e59b97d187ba1f329e9a00c
+ "@swc/counter": ^0.1.3
+ checksum: e251f6994de12a2a81ed79d902a521398feda346022e09567c758eee1cca606743c9bb296de74d6fbe339f953eaf69176202babc8ef9c911d5d538fc0790df28
languageName: node
linkType: hard
@@ -1948,7 +1288,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8":
+"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8":
version: 7.0.9
resolution: "@types/json-schema@npm:7.0.9"
checksum: 259d0e25f11a21ba5c708f7ea47196bd396e379fddb79c76f9f4f62c945879dc21657904914313ec2754e443c5018ea8372362f323f30e0792897fdb2098a705
@@ -1983,6 +1323,32 @@ __metadata:
languageName: node
linkType: hard
+"@types/prop-types@npm:*":
+ version: 15.7.12
+ resolution: "@types/prop-types@npm:15.7.12"
+ checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe
+ languageName: node
+ linkType: hard
+
+"@types/react-dom@npm:^18.3.0":
+ version: 18.3.0
+ resolution: "@types/react-dom@npm:18.3.0"
+ dependencies:
+ "@types/react": "*"
+ checksum: a0cd9b1b815a6abd2a367a9eabdd8df8dd8f13f95897b2f9e1359ea3ac6619f957c1432ece004af7d95e2a7caddbba19faa045f831f32d6263483fc5404a7596
+ languageName: node
+ linkType: hard
+
+"@types/react@npm:*, @types/react@npm:^18.3.3":
+ version: 18.3.3
+ resolution: "@types/react@npm:18.3.3"
+ dependencies:
+ "@types/prop-types": "*"
+ csstype: ^3.0.2
+ checksum: c63d6a78163244e2022b01ef79b0baec4fe4da3475dc4a90bb8accefad35ef0c43560fd0312e5974f92a0f1108aa4d669ac72d73d66396aa060ea03b5d2e3873
+ languageName: node
+ linkType: hard
+
"@types/stack-utils@npm:^2.0.0":
version: 2.0.0
resolution: "@types/stack-utils@npm:2.0.0"
@@ -2031,6 +1397,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/yargs@npm:^17.0.8":
+ version: 17.0.32
+ resolution: "@types/yargs@npm:17.0.32"
+ dependencies:
+ "@types/yargs-parser": "*"
+ checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/parser@npm:^4.29.1":
version: 4.29.1
resolution: "@typescript-eslint/parser@npm:4.29.1"
@@ -2372,6 +1747,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn@npm:^8.8.2":
+ version: 8.11.3
+ resolution: "acorn@npm:8.11.3"
+ bin:
+ acorn: bin/acorn
+ checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c
+ languageName: node
+ linkType: hard
+
"agent-base@npm:6, agent-base@npm:^6.0.2":
version: 6.0.2
resolution: "agent-base@npm:6.0.2"
@@ -2669,43 +2053,6 @@ __metadata:
languageName: node
linkType: hard
-"babel-loader@npm:^8.2.2":
- version: 8.2.2
- resolution: "babel-loader@npm:8.2.2"
- dependencies:
- find-cache-dir: ^3.3.1
- loader-utils: ^1.4.0
- make-dir: ^3.1.0
- schema-utils: ^2.6.5
- peerDependencies:
- "@babel/core": ^7.0.0
- webpack: ">=2"
- checksum: df5092ef9886bb49aacb7c58ac40ed0681ced031c8d91e49d680cedace2aa1703390a31fbe7c0e409f739836e911c5c991119133d90d9289f681c0a8ff2447a1
- languageName: node
- linkType: hard
-
-"babel-plugin-dynamic-import-node@npm:^2.3.3":
- version: 2.3.3
- resolution: "babel-plugin-dynamic-import-node@npm:2.3.3"
- dependencies:
- object.assign: ^4.1.0
- checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b
- languageName: node
- linkType: hard
-
-"babel-plugin-inferno@npm:^6.3.0":
- version: 6.3.0
- resolution: "babel-plugin-inferno@npm:6.3.0"
- dependencies:
- "@babel/plugin-syntax-jsx": ^7
- "@babel/types": ^7
- peerDependencies:
- "@babel/core": ^7
- inferno: ">=7"
- checksum: 74b20f53083160a1edb96256881a14c347a1eee4942baa6d0143e8b9e10eecf55fb4ee8f3ff05a45041950df4cb2103820a647f5da2e7cd1766b4c4d13412751
- languageName: node
- linkType: hard
-
"babel-plugin-istanbul@npm:^6.0.0":
version: 6.0.0
resolution: "babel-plugin-istanbul@npm:6.0.0"
@@ -2731,49 +2078,6 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs2@npm:^0.2.2":
- version: 0.2.2
- resolution: "babel-plugin-polyfill-corejs2@npm:0.2.2"
- dependencies:
- "@babel/compat-data": ^7.13.11
- "@babel/helper-define-polyfill-provider": ^0.2.2
- semver: ^6.1.1
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: eee45ecce743e06840d29936a7f4a9f9eca19552ba010e9f3676c6a2697ab815230f39953296b72f09665de0e8fffe260e52b348011a9ddba36cfa7eec6f8c51
- languageName: node
- linkType: hard
-
-"babel-plugin-polyfill-corejs3@npm:^0.2.2":
- version: 0.2.4
- resolution: "babel-plugin-polyfill-corejs3@npm:0.2.4"
- dependencies:
- "@babel/helper-define-polyfill-provider": ^0.2.2
- core-js-compat: ^3.14.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 49e9b1709fd76bff8b577da38548d05ec0317acaa9cba893bf447af7b0f26494d635b70814452782d079b2b6f25c09dd8fa76e151c0e4ae1397e8295af14e685
- languageName: node
- linkType: hard
-
-"babel-plugin-polyfill-regenerator@npm:^0.2.2":
- version: 0.2.2
- resolution: "babel-plugin-polyfill-regenerator@npm:0.2.2"
- dependencies:
- "@babel/helper-define-polyfill-provider": ^0.2.2
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3e32e318fd91d65c3af2bb363189f00d3839f07a73a08813b553553e07da205162091b428dd5b6ffb6ea4caf531ff43ebc54197b0a5a9dc2fc5c7e9a650e946d
- languageName: node
- linkType: hard
-
-"babel-plugin-transform-remove-console@npm:^6.9.4":
- version: 6.9.4
- resolution: "babel-plugin-transform-remove-console@npm:6.9.4"
- checksum: 1123c3816c6f89c064752199c8796f30265d937f5d8e1e43d3837f1c0e87ed0e6bbd0afa6117ce021c8b93ec1de7154e158674bb22331c7ed6609d10121359df
- languageName: node
- linkType: hard
-
"babel-preset-current-node-syntax@npm:^1.0.0":
version: 1.0.1
resolution: "babel-preset-current-node-syntax@npm:1.0.1"
@@ -2873,7 +2177,7 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.16.7":
+"browserslist@npm:^4.14.5, browserslist@npm:^4.16.6":
version: 4.16.7
resolution: "browserslist@npm:4.16.7"
dependencies:
@@ -3240,13 +2544,6 @@ __metadata:
languageName: unknown
linkType: soft
-"commondir@npm:^1.0.1":
- version: 1.0.1
- resolution: "commondir@npm:1.0.1"
- checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb
- languageName: node
- linkType: hard
-
"concat-map@npm:0.0.1":
version: 0.0.1
resolution: "concat-map@npm:0.0.1"
@@ -3297,20 +2594,10 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.14.0, core-js-compat@npm:^3.16.0":
- version: 3.16.1
- resolution: "core-js-compat@npm:3.16.1"
- dependencies:
- browserslist: ^4.16.7
- semver: 7.0.0
- checksum: fbbc054f6d1cc0e172846b39b264c7c9ef5405390a6d5e1ff7bda7c71457932e112fcf861e1c6171505a2e407407db32b99cd24badcc79a5d08fd04e46076c4d
- languageName: node
- linkType: hard
-
-"core-js@npm:^3.16.1":
- version: 3.16.1
- resolution: "core-js@npm:3.16.1"
- checksum: 7924fa2a7f00e3a33bbe92fe42ba59fbbe7e01557a59824d000976300be3ba224cca20161f61654b3861ea80d244d6adfee6ed3ae6d6d9931210a37510fb7c9b
+"core-js@npm:^3.37.1":
+ version: 3.37.1
+ resolution: "core-js@npm:3.37.1"
+ checksum: 2d58a5c599f05c3e04abc8bc5e64b88eb17d914c0f552f670fb800afa74ec54b4fcc7f231ad6bd45badaf62c0fb0ce30e6fe89cedb6bb6d54e6f19115c3c17ff
languageName: node
linkType: hard
@@ -3384,6 +2671,13 @@ __metadata:
languageName: node
linkType: hard
+"csstype@npm:^3.0.2":
+ version: 3.1.3
+ resolution: "csstype@npm:3.1.3"
+ checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7
+ languageName: node
+ linkType: hard
+
"cubic2quad@npm:^1.0.0":
version: 1.1.1
resolution: "cubic2quad@npm:1.1.1"
@@ -4023,7 +3317,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0":
+"eslint-visitor-keys@npm:^2.0.0":
version: 2.1.0
resolution: "eslint-visitor-keys@npm:2.1.0"
checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d
@@ -4442,17 +3736,6 @@ __metadata:
languageName: node
linkType: hard
-"find-cache-dir@npm:^3.3.1":
- version: 3.3.1
- resolution: "find-cache-dir@npm:3.3.1"
- dependencies:
- commondir: ^1.0.1
- make-dir: ^3.0.2
- pkg-dir: ^4.1.0
- checksum: 0f7c22b65e07f9b486b4560227d014fab1e79ffbbfbafb87d113a2e878510bd620ef6fdff090e5248bb2846d28851d19e42bfdc7c50687966acc106328e7abf1
- languageName: node
- linkType: hard
-
"find-my-way@npm:^4.1.0":
version: 4.3.3
resolution: "find-my-way@npm:4.3.3"
@@ -5030,31 +4313,6 @@ __metadata:
languageName: node
linkType: hard
-"inferno-shared@npm:7.4.8":
- version: 7.4.8
- resolution: "inferno-shared@npm:7.4.8"
- checksum: d9a3204ce75ee2133d2efb5f4f247d82c087631f900ab088a0c87a0259d4cd4719ace583e1dd88b4bc32cacac975995ee3cc16f6603a620f7cd061e2f7d3d650
- languageName: node
- linkType: hard
-
-"inferno-vnode-flags@npm:7.4.8, inferno-vnode-flags@npm:^7.4.8":
- version: 7.4.8
- resolution: "inferno-vnode-flags@npm:7.4.8"
- checksum: 72f26ebb361482a3312a30c89606c1eee85d7c7a790b2614d0d8567291d6cd7079b7536285b749dbfd5ead77e1546a2f4a676692e3fb08eb90eef009cbabbce0
- languageName: node
- linkType: hard
-
-"inferno@npm:^7.4.8":
- version: 7.4.8
- resolution: "inferno@npm:7.4.8"
- dependencies:
- inferno-shared: 7.4.8
- inferno-vnode-flags: 7.4.8
- opencollective-postinstall: ^2.0.3
- checksum: fa814fcb5f7e865ec29ceee00e6e6d7688cd0dcc9db57ab9619d62de08076ee823ee81c4e47ff3fa6632e896817bda1b45ac8a30b60357197ffcc9a1ef9e0ac0
- languageName: node
- linkType: hard
-
"inflight@npm:^1.0.4":
version: 1.0.6
resolution: "inflight@npm:1.0.6"
@@ -5972,15 +5230,6 @@ __metadata:
languageName: node
linkType: hard
-"jsesc@npm:~0.5.0":
- version: 0.5.0
- resolution: "jsesc@npm:0.5.0"
- bin:
- jsesc: bin/jsesc
- checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17
- languageName: node
- linkType: hard
-
"json-parse-even-better-errors@npm:^2.3.1":
version: 2.3.1
resolution: "json-parse-even-better-errors@npm:2.3.1"
@@ -6023,17 +5272,6 @@ __metadata:
languageName: node
linkType: hard
-"json5@npm:^1.0.1":
- version: 1.0.1
- resolution: "json5@npm:1.0.1"
- dependencies:
- minimist: ^1.2.0
- bin:
- json5: lib/cli.js
- checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3
- languageName: node
- linkType: hard
-
"json5@npm:^2.1.2":
version: 2.2.0
resolution: "json5@npm:2.2.0"
@@ -6045,6 +5283,13 @@ __metadata:
languageName: node
linkType: hard
+"jsonc-parser@npm:^3.2.0":
+ version: 3.2.1
+ resolution: "jsonc-parser@npm:3.2.1"
+ checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7
+ languageName: node
+ linkType: hard
+
"jsprim@npm:^1.2.2":
version: 1.4.1
resolution: "jsprim@npm:1.4.1"
@@ -6135,17 +5380,6 @@ __metadata:
languageName: node
linkType: hard
-"loader-utils@npm:^1.4.0":
- version: 1.4.0
- resolution: "loader-utils@npm:1.4.0"
- dependencies:
- big.js: ^5.2.2
- emojis-list: ^3.0.0
- json5: ^1.0.1
- checksum: d150b15e7a42ac47d935c8b484b79e44ff6ab4c75df7cc4cb9093350cf014ec0b17bdb60c5d6f91a37b8b218bd63b973e263c65944f58ca2573e402b9a27e717
- languageName: node
- linkType: hard
-
"loader-utils@npm:^2.0.0":
version: 2.0.0
resolution: "loader-utils@npm:2.0.0"
@@ -6184,13 +5418,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.debounce@npm:^4.0.8":
- version: 4.0.8
- resolution: "lodash.debounce@npm:4.0.8"
- checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6
- languageName: node
- linkType: hard
-
"lodash.merge@npm:^4.6.2":
version: 4.6.2
resolution: "lodash.merge@npm:4.6.2"
@@ -6212,7 +5439,7 @@ __metadata:
languageName: node
linkType: hard
-"loose-envify@npm:^1.4.0":
+"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0":
version: 1.4.0
resolution: "loose-envify@npm:1.4.0"
dependencies:
@@ -6250,7 +5477,7 @@ __metadata:
languageName: node
linkType: hard
-"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0":
+"make-dir@npm:^3.0.0":
version: 3.1.0
resolution: "make-dir@npm:3.1.0"
dependencies:
@@ -6410,7 +5637,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:^1.2.0, minimist@npm:^1.2.5":
+"minimist@npm:^1.2.5":
version: 1.2.5
resolution: "minimist@npm:1.2.5"
checksum: 86706ce5b36c16bfc35c5fe3dbb01d5acdc9a22f2b6cc810b6680656a1d2c0e44a0159c9a3ba51fb072bb5c203e49e10b51dcd0eec39c481f4c42086719bae52
@@ -6731,7 +5958,7 @@ __metadata:
languageName: node
linkType: hard
-"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2":
+"object.assign@npm:^4.1.2":
version: 4.1.2
resolution: "object.assign@npm:4.1.2"
dependencies:
@@ -6804,15 +6031,6 @@ __metadata:
languageName: node
linkType: hard
-"opencollective-postinstall@npm:^2.0.3":
- version: 2.0.3
- resolution: "opencollective-postinstall@npm:2.0.3"
- bin:
- opencollective-postinstall: index.js
- checksum: 0a68c5cef135e46d11e665d5077398285d1ce5311c948e8327b435791c409744d4a6bb9c55bd6507fb5f2ef34b0ad920565adcdaf974cbdae701aead6f32b396
- languageName: node
- linkType: hard
-
"opener@npm:^1.5.2":
version: 1.5.2
resolution: "opener@npm:1.5.2"
@@ -7035,7 +6253,7 @@ __metadata:
languageName: node
linkType: hard
-"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0":
+"pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
dependencies:
@@ -7273,6 +6491,18 @@ __metadata:
languageName: node
linkType: hard
+"react-dom@npm:^18.3.1":
+ version: 18.3.1
+ resolution: "react-dom@npm:18.3.1"
+ dependencies:
+ loose-envify: ^1.1.0
+ scheduler: ^0.23.2
+ peerDependencies:
+ react: ^18.3.1
+ checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9
+ languageName: node
+ linkType: hard
+
"react-is@npm:^16.8.1":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
@@ -7287,6 +6517,15 @@ __metadata:
languageName: node
linkType: hard
+"react@npm:^18.3.1":
+ version: 18.3.1
+ resolution: "react@npm:18.3.1"
+ dependencies:
+ loose-envify: ^1.1.0
+ checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376
+ languageName: node
+ linkType: hard
+
"readable-stream@npm:^1.0.33":
version: 1.1.14
resolution: "readable-stream@npm:1.1.14"
@@ -7343,35 +6582,10 @@ __metadata:
languageName: node
linkType: hard
-"regenerate-unicode-properties@npm:^8.2.0":
- version: 8.2.0
- resolution: "regenerate-unicode-properties@npm:8.2.0"
- dependencies:
- regenerate: ^1.4.0
- checksum: ee7db70ab25b95f2e3f39537089fc3eddba0b39fc9b982d6602f127996ce873d8c55584d5428486ca00dc0a85d174d943354943cd4a745cda475c8fe314b4f8a
- languageName: node
- linkType: hard
-
-"regenerate@npm:^1.4.0":
- version: 1.4.2
- resolution: "regenerate@npm:1.4.2"
- checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0
- languageName: node
- linkType: hard
-
-"regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.9":
- version: 0.13.9
- resolution: "regenerator-runtime@npm:0.13.9"
- checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e
- languageName: node
- linkType: hard
-
-"regenerator-transform@npm:^0.14.2":
- version: 0.14.5
- resolution: "regenerator-transform@npm:0.14.5"
- dependencies:
- "@babel/runtime": ^7.8.4
- checksum: a467a3b652b4ec26ff964e9c5f1817523a73fc44cb928b8d21ff11aebeac5d10a84d297fe02cea9f282bcec81a0b0d562237da69ef0f40a0160b30a4fa98bc94
+"regenerator-runtime@npm:^0.14.1":
+ version: 0.14.1
+ resolution: "regenerator-runtime@npm:0.14.1"
+ checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38
languageName: node
linkType: hard
@@ -7392,38 +6606,6 @@ __metadata:
languageName: node
linkType: hard
-"regexpu-core@npm:^4.7.1":
- version: 4.7.1
- resolution: "regexpu-core@npm:4.7.1"
- dependencies:
- regenerate: ^1.4.0
- regenerate-unicode-properties: ^8.2.0
- regjsgen: ^0.5.1
- regjsparser: ^0.6.4
- unicode-match-property-ecmascript: ^1.0.4
- unicode-match-property-value-ecmascript: ^1.2.0
- checksum: 368b4aab72132ba3c8bd114822572c920d390ae99d3d219e0c7f872c6a0a3b1fbe30c88188ff90ec6f8e681667fa8e51d84a78bb05c460996a0df6a060b7ae80
- languageName: node
- linkType: hard
-
-"regjsgen@npm:^0.5.1":
- version: 0.5.2
- resolution: "regjsgen@npm:0.5.2"
- checksum: 87c83d8488affae2493a823904de1a29a1867a07433c5e1142ad749b5606c5589b305fe35bfcc0972cf5a3b0d66b1f7999009e541be39a5d42c6041c59e2fb52
- languageName: node
- linkType: hard
-
-"regjsparser@npm:^0.6.4":
- version: 0.6.7
- resolution: "regjsparser@npm:0.6.7"
- dependencies:
- jsesc: ~0.5.0
- bin:
- regjsparser: bin/parser
- checksum: e03e83714c419cdfb4c87160f2d4b4a66dd579d699a21bff2a0795a9178eb79219b0ec5a9fa8b34e75f746f1e82aa8c90fcb0d14c0a2f9d0d678208394b11d6e
- languageName: node
- linkType: hard
-
"request@npm:^2.88.2":
version: 2.88.2
resolution: "request@npm:2.88.2"
@@ -7496,7 +6678,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@^1.14.2, resolve@^1.20.0, resolve@^1.9.0":
+"resolve@^1.20.0, resolve@^1.9.0":
version: 1.20.0
resolution: "resolve@npm:1.20.0"
dependencies:
@@ -7516,7 +6698,7 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
-"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.9.0#~builtin":
+"resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.9.0#~builtin":
version: 1.20.0
resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=c3c19d"
dependencies:
@@ -7663,14 +6845,12 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
-"schema-utils@npm:^2.6.5":
- version: 2.7.1
- resolution: "schema-utils@npm:2.7.1"
+"scheduler@npm:^0.23.2":
+ version: 0.23.2
+ resolution: "scheduler@npm:0.23.2"
dependencies:
- "@types/json-schema": ^7.0.5
- ajv: ^6.12.4
- ajv-keywords: ^3.5.2
- checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b
+ loose-envify: ^1.1.0
+ checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4
languageName: node
linkType: hard
@@ -7699,16 +6879,7 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
-"semver@npm:7.0.0":
- version: 7.0.0
- resolution: "semver@npm:7.0.0"
- bin:
- semver: bin/semver.js
- checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778
- languageName: node
- linkType: hard
-
-"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0":
+"semver@npm:^6.0.0, semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
bin:
@@ -8302,6 +7473,18 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
+"swc-loader@npm:^0.2.6":
+ version: 0.2.6
+ resolution: "swc-loader@npm:0.2.6"
+ dependencies:
+ "@swc/counter": ^0.1.3
+ peerDependencies:
+ "@swc/core": ^1.2.147
+ webpack: ">=2"
+ checksum: fe90948c02a51bb8ffcff1ce3590e01dc12860b0bb7c9e22052b14fa846ed437781ae265614a5e14344bea22001108780f00a6e350e28c0b3499bc4cd11335fb
+ languageName: node
+ linkType: hard
+
"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"
@@ -8370,7 +7553,21 @@ resolve@^2.0.0-next.3:
languageName: node
linkType: hard
-"terser@npm:^5.12.1, terser@npm:^5.7.0":
+"terser@npm:^5.31.0":
+ version: 5.31.0
+ resolution: "terser@npm:5.31.0"
+ dependencies:
+ "@jridgewell/source-map": ^0.3.3
+ acorn: ^8.8.2
+ commander: ^2.20.0
+ source-map-support: ~0.5.20
+ bin:
+ terser: bin/terser
+ checksum: 48f14229618866bba8a9464e9d0e7fdcb6b6488b3a6c4690fcf4d48df65bf45959d5ae8c02f1a0b3f3dd035a9ae340b715e1e547645b112dc3963daa3564699a
+ languageName: node
+ linkType: hard
+
+"terser@npm:^5.7.0":
version: 5.12.1
resolution: "terser@npm:5.12.1"
dependencies:
@@ -8418,10 +7615,9 @@ resolve@^2.0.0-next.3:
common: "workspace:*"
fastify: ^3.20.2
fastify-static: ^4.2.3
- inferno: ^7.4.8
- inferno-vnode-flags: ^7.4.8
lodash: ^4.17.21
platform: ^1.3.6
+ react: ^18.3.1
tgui: "workspace:*"
languageName: unknown
linkType: soft
@@ -8442,9 +7638,12 @@ resolve@^2.0.0-next.3:
version: 0.0.0-use.local
resolution: "tgui-panel@workspace:packages/tgui-panel"
dependencies:
+ "@types/react": ^18.3.3
+ "@types/react-dom": ^18.3.0
common: "workspace:*"
dompurify: ^2.3.1
- inferno: ^7.4.8
+ react: ^18.3.1
+ react-dom: ^18.3.1
tgui: "workspace:*"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
@@ -8455,10 +7654,10 @@ resolve@^2.0.0-next.3:
version: 0.0.0-use.local
resolution: "tgui-polyfill@workspace:packages/tgui-polyfill"
dependencies:
- core-js: ^3.16.1
- regenerator-runtime: ^0.13.9
- terser: ^5.12.1
- unfetch: ^4.2.0
+ core-js: ^3.37.1
+ regenerator-runtime: ^0.14.1
+ terser: ^5.31.0
+ unfetch: ^5.0.0
languageName: unknown
linkType: soft
@@ -8466,22 +7665,14 @@ resolve@^2.0.0-next.3:
version: 0.0.0-use.local
resolution: "tgui-workspace@workspace:."
dependencies:
- "@babel/core": ^7.15.0
- "@babel/eslint-parser": ^7.15.0
- "@babel/plugin-proposal-class-properties": ^7.14.5
- "@babel/plugin-transform-jscript": ^7.14.5
- "@babel/preset-env": ^7.15.0
- "@babel/preset-typescript": ^7.15.0
+ "@swc/core": ^1.5.24
+ "@swc/jest": ^0.2.36
"@types/jest": ^27.0.1
"@types/jsdom": ^16.2.13
"@types/node": ^14.17.9
"@types/webpack": ^5.28.0
"@types/webpack-env": ^1.16.2
"@typescript-eslint/parser": ^4.29.1
- babel-jest: ^27.0.6
- babel-loader: ^8.2.2
- babel-plugin-inferno: ^6.3.0
- babel-plugin-transform-remove-console: ^6.9.4
common: "workspace:*"
css-loader: ^5.2.7
esbuild-loader: ^4.1.0
@@ -8491,7 +7682,6 @@ resolve@^2.0.0-next.3:
eslint-plugin-react: ^7.24.0
eslint-plugin-unused-imports: ^1.1.4
file-loader: ^6.2.0
- inferno: ^7.4.8
jest: ^27.0.6
jest-circus: ^27.0.6
jsdom: ^16.7.0
@@ -8500,6 +7690,7 @@ resolve@^2.0.0-next.3:
sass: ^1.37.5
sass-loader: ^11.1.1
style-loader: ^2.0.0
+ swc-loader: ^0.2.6
typescript: ^4.3.5
url-loader: ^4.1.1
webpack: ^5.75.0
@@ -8513,13 +7704,15 @@ resolve@^2.0.0-next.3:
resolution: "tgui@workspace:packages/tgui"
dependencies:
"@popperjs/core": ^2.9.3
+ "@types/react": ^18.3.3
+ "@types/react-dom": ^18.3.0
common: "workspace:*"
dateformat: ^4.5.1
dompurify: ^2.3.1
- inferno: ^7.4.8
- inferno-vnode-flags: ^7.4.8
js-yaml: ^4.1.0
marked: ^4.0.10
+ react: ^18.3.1
+ react-dom: ^18.3.1
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
@@ -8813,41 +8006,10 @@ typescript@^4.3.5:
languageName: node
linkType: hard
-"unfetch@npm:^4.2.0":
- version: 4.2.0
- resolution: "unfetch@npm:4.2.0"
- checksum: 6a4b2557e1d921eaa80c4425ce27a404945ec26491ed06e62598f333996a91a44c7908cb26dc7c2746d735762b13276cf4aa41829b4c8f438dde63add3045d7a
- languageName: node
- linkType: hard
-
-"unicode-canonical-property-names-ecmascript@npm:^1.0.4":
- version: 1.0.4
- resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4"
- checksum: cc1973b18d0e1a151711e5551f87f4b3086c4f542cd5142aa691307d5720fd725fa7d36c24e12e944e108b91c72554237b0c236772d35592839434da5506c40f
- languageName: node
- linkType: hard
-
-"unicode-match-property-ecmascript@npm:^1.0.4":
- version: 1.0.4
- resolution: "unicode-match-property-ecmascript@npm:1.0.4"
- dependencies:
- unicode-canonical-property-names-ecmascript: ^1.0.4
- unicode-property-aliases-ecmascript: ^1.0.4
- checksum: 08e269fac71b5ace0f8331df9e87b9b533fe97b00c43ea58de69ae81816581490f846050e0c472279a3e7434524feba99915a93816f90dbbc0a30bcbd082da88
- languageName: node
- linkType: hard
-
-"unicode-match-property-value-ecmascript@npm:^1.2.0":
- version: 1.2.0
- resolution: "unicode-match-property-value-ecmascript@npm:1.2.0"
- checksum: 2e663cfec8e2cf317b69613566314979f717034ea8f58a237dd63234795044a87337410064fe839774d71e1d7e12195520e9edd69ed8e28f2a9eb28a2db38595
- languageName: node
- linkType: hard
-
-"unicode-property-aliases-ecmascript@npm:^1.0.4":
- version: 1.1.0
- resolution: "unicode-property-aliases-ecmascript@npm:1.1.0"
- checksum: 1a96dc462d251bb1c5237f7bc77956b29f01cefce7f3e7448430742930961557c3d1515a9669715ebb06209bf01072e2f78ba1627247017daa84346414bc02f1
+"unfetch@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "unfetch@npm:5.0.0"
+ checksum: 005133bcdc85cefea60890af4ac265799356b69c6a7719c1330484165af7109c06b9eedd3e03d620c14dcc8b43bcf329148f4c1f06016390162f845e0d0a62c5
languageName: node
linkType: hard