From 35c6a1ee2a47b8fa1ed33bc57d2866a492e16097 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Tue, 19 Dec 2023 10:16:13 -0500 Subject: [PATCH 001/188] Revert "[TM-ONLY] Early mirror of fixing TGUI images not allowing clicks" (#25729) Revert "[TM-ONLY] Early mirror of fixing TGUI images not allowing clicks (#25725)" This reverts commit 7e7301b6c9a7853906b1d0b62c8303caace6e179. --- tgui/packages/tgui/components/Image.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tgui/packages/tgui/components/Image.tsx b/tgui/packages/tgui/components/Image.tsx index 33a3850089c..82fef68993e 100644 --- a/tgui/packages/tgui/components/Image.tsx +++ b/tgui/packages/tgui/components/Image.tsx @@ -32,14 +32,13 @@ export const Image = (props: Props) => { ...rest } = props; - const computedProps = computeBoxProps(rest); - computedProps['style'] = { - ...computedProps.style, + const computedStyle = { + ...computeBoxProps(rest).style, '-ms-interpolation-mode': fixBlur ? 'nearest-neighbor' : 'auto', objectFit, }; - let content = ; + let content = ; if (tooltip) { content = {content}; From 7d975e15d7cf91d0a32a829ec859d5ab3ae142e2 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 19 Dec 2023 16:57:10 +0100 Subject: [PATCH 002/188] [MIRROR] Updates eslint + sorts imports [MDB IGNORE] (#25722) * Updates eslint + sorts imports * Update yarn.lock * Merge conflicts * Run prettier on everything * Update CharacterPreferenceWindow.tsx * ts to tsx, run prettier on these neglected files --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com> --- tgui/.eslintignore | 12 +- tgui/.eslintrc.yml | 4 + tgui/package.json | 9 +- tgui/packages/common/redux.test.ts | 2 +- tgui/packages/tgui-bench/entrypoint.tsx | 4 +- .../tgui-bench/tests/DisposalUnit.test.tsx | 5 +- tgui/packages/tgui-dev-server/dreamseeker.js | 1 + tgui/packages/tgui-dev-server/index.js | 2 +- tgui/packages/tgui-dev-server/link/retrace.js | 1 + tgui/packages/tgui-dev-server/link/server.js | 1 + tgui/packages/tgui-dev-server/reloader.js | 1 + tgui/packages/tgui-dev-server/util.js | 1 + tgui/packages/tgui-dev-server/webpack.js | 1 + tgui/packages/tgui-dev-server/winreg.js | 1 + tgui/packages/tgui-panel/Panel.tsx | 1 + .../tgui-panel/audio/NowPlayingWidget.jsx | 1 + tgui/packages/tgui-panel/audio/hooks.ts | 3 +- .../tgui-panel/chat/ChatPageSettings.jsx | 1 + tgui/packages/tgui-panel/chat/ChatPanel.jsx | 1 + tgui/packages/tgui-panel/chat/ChatTabs.jsx | 7 +- tgui/packages/tgui-panel/chat/actions.js | 1 + tgui/packages/tgui-panel/chat/middleware.js | 7 +- tgui/packages/tgui-panel/chat/model.js | 3 +- tgui/packages/tgui-panel/chat/reducer.js | 2 +- tgui/packages/tgui-panel/chat/renderer.jsx | 7 +- tgui/packages/tgui-panel/game/hooks.ts | 1 + tgui/packages/tgui-panel/game/middleware.js | 2 +- tgui/packages/tgui-panel/index.tsx | 5 +- .../tgui-panel/ping/PingIndicator.jsx | 1 + tgui/packages/tgui-panel/ping/reducer.ts | 1 + .../tgui-panel/settings/SettingsPanel.jsx | 11 +- tgui/packages/tgui-panel/settings/actions.ts | 1 + tgui/packages/tgui-panel/settings/hooks.ts | 3 +- .../tgui-panel/settings/middleware.js | 7 +- tgui/packages/tgui-panel/settings/reducer.js | 8 +- tgui/packages/tgui-say/TguiSay.tsx | 11 +- tgui/packages/tgui-say/index.tsx | 2 + tgui/packages/tgui/assets.ts | 4 +- tgui/packages/tgui/backend.ts | 1 + tgui/packages/tgui/components/BlockQuote.jsx | 1 + .../tgui/components/BodyZoneSelector.tsx | 1 + tgui/packages/tgui/components/Box.tsx | 1 + tgui/packages/tgui/components/Button.tsx | 1 + tgui/packages/tgui/components/ByondUi.jsx | 1 + tgui/packages/tgui/components/Chart.tsx | 1 + tgui/packages/tgui/components/Collapsible.jsx | 1 + tgui/packages/tgui/components/ColorBox.jsx | 1 + tgui/packages/tgui/components/Dimmer.jsx | 1 + .../tgui/components/DraggableControl.jsx | 1 + tgui/packages/tgui/components/Dropdown.tsx | 1 + .../packages/tgui/components/FakeTerminal.jsx | 3 +- tgui/packages/tgui/components/Flex.tsx | 1 + tgui/packages/tgui/components/Icon.tsx | 1 + tgui/packages/tgui/components/Image.tsx | 1 + .../tgui/components/InfinitePlane.jsx | 9 +- tgui/packages/tgui/components/Input.tsx | 1 + tgui/packages/tgui/components/KeyListener.tsx | 1 + tgui/packages/tgui/components/Knob.jsx | 1 + tgui/packages/tgui/components/LabeledList.tsx | 1 + tgui/packages/tgui/components/MenuBar.tsx | 3 +- tgui/packages/tgui/components/Modal.jsx | 1 + tgui/packages/tgui/components/NoticeBox.jsx | 1 + tgui/packages/tgui/components/NumberInput.jsx | 1 + tgui/packages/tgui/components/ProgressBar.tsx | 7 +- .../tgui/components/RestrictedInput.jsx | 5 +- tgui/packages/tgui/components/RoundGauge.jsx | 1 + tgui/packages/tgui/components/Section.tsx | 7 +- tgui/packages/tgui/components/Slider.jsx | 1 + tgui/packages/tgui/components/Stack.tsx | 1 + .../tgui/components/StyleableSection.tsx | 1 + tgui/packages/tgui/components/Table.jsx | 1 + tgui/packages/tgui/components/Tabs.tsx | 1 + tgui/packages/tgui/components/TextArea.tsx | 13 +- tgui/packages/tgui/components/TimeDisplay.jsx | 3 +- tgui/packages/tgui/components/index.ts | 10 +- tgui/packages/tgui/debug/middleware.js | 1 + tgui/packages/tgui/drag.ts | 2 +- tgui/packages/tgui/events.test.ts | 2 +- tgui/packages/tgui/events.ts | 3 +- tgui/packages/tgui/hotkeys.ts | 1 + tgui/packages/tgui/index.tsx | 14 +- .../tgui/interfaces/AccountingConsole.tsx | 7 +- .../packages/tgui/interfaces/Achievements.jsx | 3 +- tgui/packages/tgui/interfaces/AdminFax.jsx | 12 +- tgui/packages/tgui/interfaces/AdminPDA.jsx | 2 +- tgui/packages/tgui/interfaces/Adminhelp.tsx | 3 +- .../tgui/interfaces/AdventureBrowser.tsx | 4 +- tgui/packages/tgui/interfaces/AiRestorer.tsx | 1 + .../tgui/interfaces/AiVoiceChanger.tsx | 3 +- tgui/packages/tgui/interfaces/AirAlarm.tsx | 1 + .../tgui/interfaces/AirlockElectronics.tsx | 1 + tgui/packages/tgui/interfaces/AlertModal.tsx | 4 +- .../tgui/interfaces/AmmoWorkbench.jsx | 15 +- .../tgui/interfaces/AnomalyRefinery.jsx | 4 +- .../tgui/interfaces/AntagInfoAssaultops.tsx | 17 +- .../tgui/interfaces/AntagInfoBlob.tsx | 7 +- .../tgui/interfaces/AntagInfoBrainwashed.tsx | 2 +- .../tgui/interfaces/AntagInfoBrother.tsx | 2 +- .../tgui/interfaces/AntagInfoChangeling.tsx | 9 +- .../tgui/interfaces/AntagInfoDemon.tsx | 5 +- .../tgui/interfaces/AntagInfoGeneric.tsx | 6 +- .../tgui/interfaces/AntagInfoHeretic.tsx | 15 +- .../tgui/interfaces/AntagInfoMalf.tsx | 17 +- .../tgui/interfaces/AntagInfoMorph.tsx | 4 +- .../tgui/interfaces/AntagInfoNightmare.tsx | 4 +- .../tgui/interfaces/AntagInfoNinja.tsx | 7 +- .../tgui/interfaces/AntagInfoOpfor.tsx | 4 +- .../tgui/interfaces/AntagInfoSeparatist.tsx | 2 +- .../tgui/interfaces/AntagInfoTraitor.tsx | 13 +- .../tgui/interfaces/AntagInfoWizard.tsx | 7 +- tgui/packages/tgui/interfaces/ApcControl.jsx | 5 +- .../tgui/interfaces/ApprenticeContract.tsx | 1 + tgui/packages/tgui/interfaces/Aquarium.tsx | 3 +- .../tgui/interfaces/ArmamentStation.jsx | 34 +- .../tgui/interfaces/AtmosControlConsole.tsx | 3 +- .../tgui/interfaces/AtmosControlPanel.jsx | 1 + tgui/packages/tgui/interfaces/AtmosFilter.tsx | 6 +- tgui/packages/tgui/interfaces/AtmosMixer.tsx | 1 + tgui/packages/tgui/interfaces/AtmosPump.tsx | 1 + .../tgui/interfaces/AtmosTempGate.tsx | 1 + .../tgui/interfaces/AtmosTempPump.tsx | 1 + tgui/packages/tgui/interfaces/Autolathe.tsx | 21 +- .../tgui/interfaces/AutomatedAnnouncement.tsx | 1 + .../tgui/interfaces/AuxBaseConsole.tsx | 1 + tgui/packages/tgui/interfaces/BankMachine.tsx | 1 + .../tgui/interfaces/BasketballPanel.tsx | 2 +- .../packages/tgui/interfaces/Biogenerator.tsx | 13 +- .../tgui/interfaces/BluespaceArtillery.tsx | 1 + .../interfaces/BluespaceArtillerySkyrat.tsx | 3 +- .../tgui/interfaces/BluespaceLocator.tsx | 1 + .../tgui/interfaces/BluespaceSender.tsx | 5 +- .../tgui/interfaces/BluespaceVendor.tsx | 1 + tgui/packages/tgui/interfaces/BorerChem.jsx | 1 + .../tgui/interfaces/BorerEvolution.tsx | 2 +- tgui/packages/tgui/interfaces/BorgHypo.tsx | 3 +- tgui/packages/tgui/interfaces/BountyBoard.tsx | 2 +- tgui/packages/tgui/interfaces/BrigTimer.tsx | 1 + tgui/packages/tgui/interfaces/CTFPanel.tsx | 2 +- .../tgui/interfaces/CameraConsole.tsx | 1 + tgui/packages/tgui/interfaces/Canister.tsx | 1 + tgui/packages/tgui/interfaces/Canvas.tsx | 5 +- tgui/packages/tgui/interfaces/Cargo.jsx | 5 +- .../packages/tgui/interfaces/CargoExpress.tsx | 1 + .../tgui/interfaces/CargoHoldTerminal.tsx | 1 + .../tgui/interfaces/CargoImportConsole.jsx | 31 +- .../tgui/interfaces/CellularEmporium.tsx | 7 +- .../tgui/interfaces/CentcomPodLauncher.jsx | 1 + .../tgui/interfaces/ChameleonCard.jsx | 2 +- tgui/packages/tgui/interfaces/Changelog.jsx | 9 +- .../tgui/interfaces/CheckboxInput.tsx | 8 +- .../tgui/interfaces/ChemAcclimator.tsx | 1 + .../tgui/interfaces/ChemDebugSynthesizer.tsx | 2 +- .../tgui/interfaces/ChemDispenser.tsx | 1 + tgui/packages/tgui/interfaces/ChemFilter.tsx | 1 + tgui/packages/tgui/interfaces/ChemHeater.jsx | 1 + tgui/packages/tgui/interfaces/ChemMaster.tsx | 15 +- .../tgui/interfaces/ChemMixingChamber.tsx | 7 +- tgui/packages/tgui/interfaces/ChemPress.tsx | 3 +- .../tgui/interfaces/ChemReactionChamber.tsx | 5 +- .../tgui/interfaces/ChemRecipeDebug.jsx | 1 + .../tgui/interfaces/ChemSeparator.tsx | 5 +- .../packages/tgui/interfaces/ChemSplitter.tsx | 1 + .../tgui/interfaces/ChemSynthesizer.tsx | 1 + .../tgui/interfaces/CircuitAccessChecker.tsx | 9 +- .../tgui/interfaces/CircuitAdminPanel.tsx | 1 + .../tgui/interfaces/CircuitModule.jsx | 2 +- .../tgui/interfaces/CircuitSignalHandler.tsx | 3 +- tgui/packages/tgui/interfaces/Clipboard.tsx | 3 +- .../tgui/interfaces/ClockworkResearch.tsx | 6 +- .../tgui/interfaces/ClockworkSlab.jsx | 13 +- .../tgui/interfaces/ColorMatrixEditor.tsx | 9 +- .../tgui/interfaces/CommandReportConsole.jsx | 2 +- .../tgui/interfaces/CommunicationsConsole.jsx | 3 +- .../tgui/interfaces/ComponentPrinter.tsx | 15 +- tgui/packages/tgui/interfaces/Crayon.tsx | 1 + tgui/packages/tgui/interfaces/CrewConsole.jsx | 3 +- .../tgui/interfaces/CrewConsoleSkyrat.jsx | 3 +- .../CrewConsoleSkyratBlueshield.jsx | 3 +- .../packages/tgui/interfaces/CrewManifest.jsx | 1 + .../tgui/interfaces/CrossingSignal.tsx | 3 +- tgui/packages/tgui/interfaces/Cryo.jsx | 2 +- .../packages/tgui/interfaces/Crystallizer.tsx | 10 +- .../tgui/interfaces/CyborgBootDebug.jsx | 1 + .../tgui/interfaces/DelamProcedure.tsx | 2 +- .../tgui/interfaces/DepartmentOrders.tsx | 1 + .../tgui/interfaces/DestinationTagger.tsx | 5 +- .../tgui/interfaces/DestructiveAnalyzer.tsx | 3 +- .../DnaConsole/DnaConsoleEnzymes.jsx | 2 +- .../DnaConsole/DnaConsoleSequencer.jsx | 5 +- .../DnaConsole/DnaConsoleStorage.jsx | 7 +- .../interfaces/DnaConsole/MutationInfo.jsx | 1 + .../tgui/interfaces/DnaConsole/index.jsx | 8 +- .../tgui/interfaces/EightBallVote.tsx | 9 +- .../packages/tgui/interfaces/Electrolyzer.tsx | 1 + tgui/packages/tgui/interfaces/Electropack.jsx | 1 + .../tgui/interfaces/ElevatorPanel.tsx | 3 +- tgui/packages/tgui/interfaces/EmotePanel.tsx | 8 +- .../tgui/interfaces/EngravedMessage.jsx | 1 + tgui/packages/tgui/interfaces/EventPanel.jsx | 5 +- .../packages/tgui/interfaces/ExaminePanel.jsx | 6 +- .../tgui/interfaces/ExodroneConsole.tsx | 11 +- .../tgui/interfaces/ExoscannerConsole.tsx | 6 +- .../tgui/interfaces/ExosuitControlConsole.jsx | 1 + .../tgui/interfaces/ExosuitFabricator.tsx | 17 +- .../tgui/interfaces/ExperimentConfigure.jsx | 7 +- .../interfaces/Fabrication/DesignBrowser.tsx | 7 +- .../Fabrication/MaterialAccessBar.tsx | 3 +- .../Fabrication/MaterialCostSequence.tsx | 4 +- .../interfaces/Fabrication/MaterialIcon.tsx | 1 + .../tgui/interfaces/Fabrication/SearchBar.tsx | 3 +- tgui/packages/tgui/interfaces/Fabricator.tsx | 19 +- tgui/packages/tgui/interfaces/Filteriffic.jsx | 3 +- tgui/packages/tgui/interfaces/FishCatalog.tsx | 3 +- .../tgui/interfaces/FishingCalculator.tsx | 1 + tgui/packages/tgui/interfaces/FishingRod.tsx | 2 +- tgui/packages/tgui/interfaces/ForceEvent.tsx | 3 +- tgui/packages/tgui/interfaces/GasAnalyzer.tsx | 8 +- .../packages/tgui/interfaces/GlassBlowing.tsx | 13 +- tgui/packages/tgui/interfaces/Gps.jsx | 1 + .../tgui/interfaces/GreyscaleModifyMenu.tsx | 6 +- .../tgui/interfaces/GulagItemReclaimer.tsx | 1 + .../tgui/interfaces/Hypertorus/Controls.tsx | 6 +- .../tgui/interfaces/Hypertorus/Gases.tsx | 12 +- .../tgui/interfaces/Hypertorus/Parameters.tsx | 5 +- .../tgui/interfaces/Hypertorus/Recipes.tsx | 2 +- .../interfaces/Hypertorus/Temperatures.tsx | 8 +- .../tgui/interfaces/Hypertorus/index.tsx | 10 +- tgui/packages/tgui/interfaces/IVDrip.tsx | 9 +- .../tgui/interfaces/InfraredEmitter.tsx | 3 +- tgui/packages/tgui/interfaces/InfuserBook.tsx | 5 +- .../IntegratedCircuit/BasicInput.jsx | 2 +- .../IntegratedCircuit/CircuitInfo.jsx | 2 +- .../IntegratedCircuit/ComponentMenu.jsx | 13 +- .../IntegratedCircuit/DisplayComponent.jsx | 5 +- .../IntegratedCircuit/DisplayName.jsx | 2 +- .../IntegratedCircuit/FundamentalTypes.jsx | 2 +- .../IntegratedCircuit/ObjectComponent.jsx | 3 +- .../interfaces/IntegratedCircuit/Port.jsx | 7 +- .../IntegratedCircuit/VariableMenu.jsx | 11 +- .../interfaces/IntegratedCircuit/index.jsx | 13 +- .../tgui/interfaces/IntensityCredits.tsx | 2 +- .../tgui/interfaces/InteractionMenu.tsx | 2 +- tgui/packages/tgui/interfaces/Interview.tsx | 13 +- .../tgui/interfaces/InterviewManager.jsx | 2 +- .../packages/tgui/interfaces/JobSelection.tsx | 11 +- tgui/packages/tgui/interfaces/Jukebox.jsx | 3 +- .../tgui/interfaces/LaborClaimConsole.jsx | 1 + .../tgui/interfaces/LaunchpadRemote.tsx | 1 + tgui/packages/tgui/interfaces/Lawpanel.tsx | 1 + .../packages/tgui/interfaces/LibraryAdmin.tsx | 1 + .../tgui/interfaces/LibraryConsole.jsx | 5 +- .../tgui/interfaces/LibraryScanner.jsx | 2 +- .../tgui/interfaces/LibraryVisitor.jsx | 1 + .../tgui/interfaces/LightController.tsx | 2 +- tgui/packages/tgui/interfaces/LightSpawn.tsx | 2 +- .../tgui/interfaces/ListInputModal.tsx | 10 +- .../tgui/interfaces/LoadoutManager.tsx | 7 +- tgui/packages/tgui/interfaces/LockedSafe.tsx | 1 + tgui/packages/tgui/interfaces/LogViewer.tsx | 1 + .../interfaces/LuaEditor/ChunkViewModal.jsx | 7 +- .../tgui/interfaces/LuaEditor/Log.jsx | 2 +- .../interfaces/LuaEditor/StateSelectModal.jsx | 2 +- .../tgui/interfaces/LuaEditor/index.jsx | 21 +- tgui/packages/tgui/interfaces/MODpaint.jsx | 13 +- tgui/packages/tgui/interfaces/MODsuit.tsx | 21 +- tgui/packages/tgui/interfaces/MafiaPanel.tsx | 3 +- .../tgui/interfaces/MarkdownViewer.tsx | 1 + .../tgui/interfaces/MassDriverControl.jsx | 2 +- tgui/packages/tgui/interfaces/MassSpec.jsx | 1 + tgui/packages/tgui/interfaces/MatMarket.tsx | 7 +- .../tgui/interfaces/MatrixMathTester.tsx | 5 +- .../tgui/interfaces/Mecha/AlertPane.tsx | 2 +- .../tgui/interfaces/Mecha/ModulesPane.tsx | 21 +- tgui/packages/tgui/interfaces/Mecha/index.tsx | 14 +- .../packages/tgui/interfaces/MedicalKiosk.jsx | 1 + .../interfaces/MedicalRecords/NoteKeeper.tsx | 1 + .../interfaces/MedicalRecords/RecordTabs.tsx | 13 +- .../interfaces/MedicalRecords/RecordView.tsx | 23 +- .../tgui/interfaces/MedicalRecords/helpers.ts | 3 +- .../tgui/interfaces/MedicalRecords/index.tsx | 3 +- tgui/packages/tgui/interfaces/MemoryPanel.jsx | 3 +- .../tgui/interfaces/MessageMonitor.tsx | 9 +- .../tgui/interfaces/MicrofusionGunControl.jsx | 7 +- .../tgui/interfaces/ModularShieldGen.tsx | 21 +- tgui/packages/tgui/interfaces/NavBeacon.tsx | 3 +- .../tgui/interfaces/NetpodOutfits.tsx | 8 +- tgui/packages/tgui/interfaces/Newscaster.jsx | 9 +- tgui/packages/tgui/interfaces/NifPanel.jsx | 14 +- tgui/packages/tgui/interfaces/NifSoulPoem.jsx | 10 +- tgui/packages/tgui/interfaces/NoticeBoard.tsx | 1 + .../interfaces/NotificationPreferences.jsx | 2 +- tgui/packages/tgui/interfaces/NtnetRelay.tsx | 3 +- .../tgui/interfaces/NtosBountyBoard.tsx | 2 +- tgui/packages/tgui/interfaces/NtosCamera.jsx | 2 +- tgui/packages/tgui/interfaces/NtosCard.tsx | 1 + tgui/packages/tgui/interfaces/NtosCargo.tsx | 2 +- .../tgui/interfaces/NtosCrewManifest.jsx | 1 + .../tgui/interfaces/NtosEmojipedia.tsx | 3 +- .../tgui/interfaces/NtosGasAnalyzer.tsx | 1 + .../tgui/interfaces/NtosJobManager.jsx | 2 +- tgui/packages/tgui/interfaces/NtosMODsuit.jsx | 2 +- .../tgui/interfaces/NtosMafiaPanel.tsx | 2 +- tgui/packages/tgui/interfaces/NtosMain.tsx | 2 +- .../interfaces/NtosMessenger/ChatScreen.tsx | 21 +- .../tgui/interfaces/NtosMessenger/index.tsx | 22 +- .../tgui/interfaces/NtosNetDownloader.tsx | 13 +- .../tgui/interfaces/NtosNetMonitor.jsx | 2 +- .../tgui/interfaces/NtosNifsoftCatalog.jsx | 8 +- tgui/packages/tgui/interfaces/NtosNotepad.tsx | 9 +- tgui/packages/tgui/interfaces/NtosPay.tsx | 12 +- .../tgui/interfaces/NtosPhysScanner.jsx | 2 +- .../tgui/interfaces/NtosPortraitPrinter.jsx | 5 +- tgui/packages/tgui/interfaces/NtosRadar.tsx | 3 +- tgui/packages/tgui/interfaces/NtosRecords.jsx | 3 +- .../tgui/interfaces/NtosRevelation.tsx | 7 +- .../packages/tgui/interfaces/NtosRobotact.jsx | 3 +- .../packages/tgui/interfaces/NtosScipaper.jsx | 8 +- .../packages/tgui/interfaces/NtosShipping.tsx | 1 + .../packages/tgui/interfaces/NtosSignaler.tsx | 2 +- .../tgui/interfaces/NtosSkillTracker.jsx | 6 +- .../tgui/interfaces/NtosSupermatter.tsx | 5 +- tgui/packages/tgui/interfaces/NuclearBomb.jsx | 1 + .../tgui/interfaces/NumberInputModal.tsx | 9 +- .../tgui/interfaces/OpposingForcePanel.jsx | 21 +- .../packages/tgui/interfaces/Orbit/helpers.ts | 1 + tgui/packages/tgui/interfaces/Orbit/index.tsx | 1 + tgui/packages/tgui/interfaces/OreBox.tsx | 3 +- .../packages/tgui/interfaces/OreContainer.tsx | 3 +- .../tgui/interfaces/OreRedemptionMachine.jsx | 17 +- tgui/packages/tgui/interfaces/PaiCard.tsx | 1 + .../interfaces/PaiInterface/Available.tsx | 1 + .../interfaces/PaiInterface/Directives.tsx | 1 + .../interfaces/PaiInterface/Installed.tsx | 1 + .../tgui/interfaces/PaiInterface/System.tsx | 1 + .../tgui/interfaces/PaiInterface/index.tsx | 3 +- tgui/packages/tgui/interfaces/PaiSubmit.tsx | 1 + .../tgui/interfaces/PaintingAdminPanel.tsx | 1 + .../tgui/interfaces/PaintingMachine.jsx | 2 +- .../tgui/interfaces/Pandemic/Beaker.tsx | 1 + .../tgui/interfaces/Pandemic/Specimen.tsx | 3 +- .../tgui/interfaces/Pandemic/Symptom.tsx | 1 + .../tgui/interfaces/Pandemic/Virus.tsx | 1 + .../tgui/interfaces/Pandemic/index.tsx | 3 +- tgui/packages/tgui/interfaces/PaperSheet.tsx | 7 +- .../interfaces/ParticleEdit/EntriesBasic.tsx | 8 +- .../ParticleEdit/EntriesGenerators.tsx | 8 +- .../interfaces/ParticleEdit/Generators.tsx | 4 +- .../tgui/interfaces/ParticleEdit/Tutorial.tsx | 10 +- .../tgui/interfaces/ParticleEdit/index.tsx | 8 +- .../tgui/interfaces/PersonalCrafting.tsx | 19 +- tgui/packages/tgui/interfaces/Photocopier.jsx | 1 + .../tgui/interfaces/PhysicalNewscaster.tsx | 2 +- .../tgui/interfaces/PipeDispenser.tsx | 3 +- .../tgui/interfaces/PlaneMasterDebug.tsx | 31 +- .../tgui/interfaces/PlayerTicketHistory.tsx | 12 +- .../tgui/interfaces/PortableChemMixer.tsx | 3 +- .../tgui/interfaces/PortableScrubber.tsx | 10 +- .../tgui/interfaces/PortraitPicker.jsx | 5 +- .../packages/tgui/interfaces/PowerMonitor.jsx | 7 +- .../interfaces/PreferencesMenu/AntagsPage.tsx | 1 + .../CharacterPreferenceWindow.tsx | 18 +- .../PreferencesMenu/GamePreferenceWindow.tsx | 11 +- .../PreferencesMenu/GamePreferencesPage.tsx | 1 + .../interfaces/PreferencesMenu/JobsPage.tsx | 1 + .../PreferencesMenu/KeybindingsPage.tsx | 13 +- .../PreferencesMenu/LanguagesMenu.tsx | 2 +- .../interfaces/PreferencesMenu/LimbsPage.tsx | 10 +- .../interfaces/PreferencesMenu/MainPage.tsx | 13 +- .../interfaces/PreferencesMenu/PageButton.tsx | 1 + .../interfaces/PreferencesMenu/QuirksPage.tsx | 7 +- .../PreferencesMenu/RandomizationButton.tsx | 3 +- .../ServerPreferencesFetcher.tsx | 1 + .../PreferencesMenu/SpeciesPage.tsx | 1 + .../interfaces/PreferencesMenu/TabbedMenu.tsx | 1 + .../antagonists/antagonists/abductor.ts | 3 +- ...saultoperative.ts => assaultoperative.tsx} | 4 +- .../antagonists/antagonists/blob.ts | 3 +- .../antagonists/antagonists/blobinfection.ts | 3 +- .../antagonists/antagonists/bloodbrother.ts | 3 +- .../antagonists/antagonists/changeling.ts | 3 +- .../antagonists/changelingmidround.ts | 3 +- .../antagonists/antagonists/clownoperative.ts | 3 +- .../antagonists/antagonists/cultist.ts | 3 +- .../antagonists/driftingcontractor.ts | 2 + .../antagonists/driftingcontractor.tsx | 22 + .../antagonists/antagonists/fugitive.ts | 3 +- .../antagonists/antagonists/glitch.ts | 3 +- .../antagonists/headrevolutionary.ts | 3 +- .../antagonists/antagonists/heretic.ts | 3 +- .../antagonists/loneinfiltrator.ts | 2 + .../antagonists/loneinfiltrator.tsx | 17 + .../antagonists/antagonists/loneoperative.ts | 3 +- .../antagonists/antagonists/malfai.ts | 3 +- .../antagonists/antagonists/malfaimidround.ts | 1 + .../antagonists/antagonists/nightmare.ts | 3 +- .../antagonists/antagonists/obsessed.ts | 3 +- .../antagonists/antagonists/operative.ts | 3 +- .../antagonists/operativemidround.ts | 3 +- .../antagonists/antagonists/paradoxclone.ts | 3 +- .../antagonists/antagonists/provocateur.ts | 3 +- .../antagonists/antagonists/revenant.ts | 3 +- .../antagonists/sentiencepotionspawn.ts | 3 +- .../antagonists/sentientdisease.ts | 3 +- .../antagonists/antagonists/spacedragon.ts | 3 +- .../antagonists/antagonists/spaceninja.ts | 3 +- .../antagonists/stowawaychangeling.ts | 3 +- .../antagonists/syndicatesleeperagent.ts | 3 +- .../antagonists/antagonists/traitor.ts | 3 +- .../antagonists/antagonists/wizard.ts | 3 +- .../antagonists/antagonists/xenomorph.ts | 3 +- .../tgui/interfaces/PreferencesMenu/data.ts | 1 + .../tgui/interfaces/PreferencesMenu/index.tsx | 3 +- .../tgui/interfaces/PreferencesMenu/names.tsx | 1 + .../character_preferences/skin_tone.tsx | 1 + .../skyrat/death_degradation.tsx | 2 +- .../character_preferences/skyrat/genitals.tsx | 14 +- .../skyrat/species_features.tsx | 22 +- .../character_preferences/tts_voice.tsx | 4 +- .../features/game_preferences/admin.tsx | 5 +- .../broadcast_login_logout.tsx | 1 + .../game_preferences/darkened_flash.tsx | 1 + .../features/game_preferences/ghost.tsx | 13 +- .../game_preferences/legacy_chat_toggles.tsx | 3 +- .../game_preferences/legacy_toggles.tsx | 3 +- .../features/game_preferences/ooc.tsx | 2 +- .../game_preferences/preferred_map.tsx | 1 + .../features/game_preferences/screentips.tsx | 5 +- .../game_preferences/skyrat/auto_dementor.tsx | 2 +- .../skyrat/erp_preferences.tsx | 2 +- .../skyrat/face_cursor_combat_mode.tsx | 1 + .../game_preferences/skyrat/ticket_ping.tsx | 2 +- .../features/game_preferences/sounds.tsx | 5 +- .../features/game_preferences/tooltips.tsx | 1 + .../features/game_preferences/ui_style.tsx | 3 +- .../game_preferences/window_flashing.tsx | 1 + .../preferences/features/species_features.tsx | 4 +- .../tgui/interfaces/PrisonerManagement.tsx | 3 +- .../packages/tgui/interfaces/ProcCallMenu.tsx | 7 +- .../tgui/interfaces/ProduceConsole.tsx | 3 +- .../tgui/interfaces/QuantumConsole.tsx | 7 +- tgui/packages/tgui/interfaces/Radio.jsx | 1 + .../tgui/interfaces/RadioactiveMicrolaser.jsx | 2 +- .../interfaces/RapidConstructionDevice.tsx | 9 +- .../tgui/interfaces/RapidPipeDispenser.tsx | 3 +- .../tgui/interfaces/RapidPlumbingDevice.tsx | 13 +- .../tgui/interfaces/RapidTilingDevice.tsx | 9 +- .../tgui/interfaces/RecordManifest.jsx | 3 +- tgui/packages/tgui/interfaces/Reflector.tsx | 4 +- .../tgui/interfaces/RemoteRobotControl.jsx | 3 +- .../tgui/interfaces/RequestManager.jsx | 1 + .../RequestsConsole/MessageViewTab.tsx | 3 +- .../RequestsConsole/MessageWriteTab.tsx | 5 +- .../RequestsConsole/RequestsConsoleHeader.tsx | 2 +- .../RequestsConsoleMainScreen.tsx | 4 +- .../tgui/interfaces/RequestsConsole/index.tsx | 2 +- tgui/packages/tgui/interfaces/Roulette.jsx | 3 +- tgui/packages/tgui/interfaces/Safe.jsx | 1 + .../tgui/interfaces/SatelliteControl.tsx | 1 + tgui/packages/tgui/interfaces/ScannerGate.jsx | 2 +- tgui/packages/tgui/interfaces/Secrets.jsx | 3 +- .../SecurityRecords/CrimeWatcher.tsx | 7 +- .../SecurityRecords/RecordPrint.tsx | 5 +- .../interfaces/SecurityRecords/RecordTabs.tsx | 15 +- .../interfaces/SecurityRecords/RecordView.tsx | 5 +- .../interfaces/SecurityRecords/helpers.ts | 3 +- .../tgui/interfaces/SecurityRecords/index.tsx | 5 +- .../tgui/interfaces/SeedExtractor.tsx | 17 +- .../tgui/interfaces/SelectEquipment.jsx | 1 + .../tgui/interfaces/SentienceFunBalloon.jsx | 4 +- .../tgui/interfaces/ServerControl.tsx | 3 +- .../tgui/interfaces/ServerControlPanel.jsx | 2 +- .../tgui/interfaces/ServerMonitor.jsx | 15 +- .../tgui/interfaces/ShuttleManipulator.jsx | 3 +- tgui/packages/tgui/interfaces/Signaler.tsx | 3 +- tgui/packages/tgui/interfaces/Signalvib.jsx | 1 + .../packages/tgui/interfaces/SkillStation.jsx | 1 + .../tgui/interfaces/SlimeBodySwapper.jsx | 2 +- tgui/packages/tgui/interfaces/SmartVend.tsx | 1 + .../packages/tgui/interfaces/SmokeMachine.tsx | 1 + .../packages/tgui/interfaces/SolarControl.tsx | 7 +- tgui/packages/tgui/interfaces/Soulcatcher.jsx | 10 +- .../tgui/interfaces/SoulcatcherUser.jsx | 8 +- .../tgui/interfaces/SparringContract.tsx | 1 + tgui/packages/tgui/interfaces/Spellbook.tsx | 3 +- .../tgui/interfaces/StackCrafting.tsx | 11 +- .../tgui/interfaces/StationAlertConsole.jsx | 1 + .../tgui/interfaces/StationTraitsPanel.tsx | 1 + .../packages/tgui/interfaces/StoryManager.tsx | 4 +- tgui/packages/tgui/interfaces/StripMenu.tsx | 3 +- tgui/packages/tgui/interfaces/Supermatter.tsx | 1 + .../tgui/interfaces/SurgeryInitiator.tsx | 1 + .../tgui/interfaces/SyndContractor.jsx | 7 +- tgui/packages/tgui/interfaces/Tank.jsx | 1 + .../tgui/interfaces/TankCompressor.jsx | 4 +- tgui/packages/tgui/interfaces/Techweb.jsx | 19 +- tgui/packages/tgui/interfaces/Telecomms.jsx | 8 +- .../tgui/interfaces/TelecommsMonitor.tsx | 9 +- .../tgui/interfaces/TextInputModal.tsx | 9 +- .../tgui/interfaces/ThermoMachine.jsx | 1 + tgui/packages/tgui/interfaces/Thermometer.jsx | 1 + tgui/packages/tgui/interfaces/TimeClock.jsx | 2 +- tgui/packages/tgui/interfaces/Timer.tsx | 1 + .../tgui/interfaces/TrackedPlaytime.jsx | 1 + .../tgui/interfaces/TrainingMachine.tsx | 1 + .../tgui/interfaces/TraitorObjectiveDebug.tsx | 1 + tgui/packages/tgui/interfaces/TramControl.tsx | 5 +- .../tgui/interfaces/TramController.tsx | 23 +- tgui/packages/tgui/interfaces/TramPlaque.tsx | 2 +- .../tgui/interfaces/TrophyAdminPanel.jsx | 1 + tgui/packages/tgui/interfaces/Trophycase.jsx | 5 +- .../tgui/interfaces/TurbineComputer.tsx | 7 +- .../tgui/interfaces/TurretControl.tsx | 1 + .../tgui/interfaces/Uplink/GenericUplink.tsx | 5 +- .../tgui/interfaces/Uplink/ObjectiveMenu.tsx | 11 +- .../packages/tgui/interfaces/Uplink/index.tsx | 27 +- .../tgui/interfaces/VaultController.tsx | 1 + tgui/packages/tgui/interfaces/Vendatray.tsx | 3 +- tgui/packages/tgui/interfaces/VotePanel.tsx | 13 +- .../tgui/interfaces/WarrantConsole.tsx | 5 +- tgui/packages/tgui/interfaces/Wires.tsx | 1 + .../tgui/interfaces/common/AccessConfig.jsx | 3 +- .../tgui/interfaces/common/AccessList.jsx | 1 + .../tgui/interfaces/common/AtmosControls.tsx | 1 + .../tgui/interfaces/common/AtmosHandbook.tsx | 1 + .../tgui/interfaces/common/BeakerDisplay.tsx | 3 +- .../tgui/interfaces/common/Connections.tsx | 2 +- .../tgui/interfaces/common/EditableText.tsx | 2 +- .../tgui/interfaces/common/GasmixParser.tsx | 2 +- .../tgui/interfaces/common/InputButtons.tsx | 3 +- .../tgui/interfaces/common/Loader.tsx | 3 +- .../tgui/interfaces/common/LoadingToolbox.tsx | 2 +- .../tgui/interfaces/common/Objectives.tsx | 1 + .../common/StatusDisplayControls.tsx | 2 +- tgui/packages/tgui/layouts/Layout.jsx | 1 + tgui/packages/tgui/layouts/NtosWindow.tsx | 1 + tgui/packages/tgui/layouts/Pane.jsx | 1 + tgui/packages/tgui/layouts/Window.tsx | 7 +- tgui/packages/tgui/renderer.ts | 1 + tgui/packages/tgui/routes.tsx | 2 +- tgui/packages/tgui/store.ts | 12 +- .../packages/tgui/stories/Storage.stories.jsx | 1 + tgui/yarn.lock | 581 +++++++++--------- 542 files changed, 1778 insertions(+), 1348 deletions(-) rename tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/{assaultoperative.ts => assaultoperative.tsx} (96%) create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx diff --git a/tgui/.eslintignore b/tgui/.eslintignore index 692ac5f24af..d3c0ac79cd8 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -3,4 +3,14 @@ /**/*.bundle.* /**/*.chunk.* /**/*.hot-update.* - +**.lock +**.log +**.json +**.svg +**.scss +**.md +**.css +**.txt +**.woff2 +**.eot +**.ttf diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index f7d552d919b..7ee056937a6 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -14,6 +14,7 @@ plugins: - radar - react - unused-imports + - simple-import-sort settings: react: version: '16.10' @@ -764,3 +765,6 @@ rules: ## Prevents the use of unused imports. ## This could be done by enabling no-unused-vars, but we're doing this for now unused-imports/no-unused-imports: error + ## https://github.com/lydell/eslint-plugin-simple-import-sort/ + simple-import-sort/imports: error + simple-import-sort/exports: error diff --git a/tgui/package.json b/tgui/package.json index bb95975ef8b..e4027aee2ca 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -27,14 +27,15 @@ "@types/node": "^14.x", "@types/webpack": "^5.28.5", "@types/webpack-env": "^1.18.4", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/parser": "^6.14.0", "css-loader": "^6.8.1", "esbuild-loader": "^4.0.2", - "eslint": "^7.32.0", - "eslint-config-prettier": "^9.0.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-radar": "^0.2.1", "eslint-plugin-react": "^7.33.2", - "eslint-plugin-unused-imports": "^1.1.5", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", "file-loader": "^6.2.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts index 0a29a92e0ce..d4af99907ce 100644 --- a/tgui/packages/common/redux.test.ts +++ b/tgui/packages/common/redux.test.ts @@ -1,10 +1,10 @@ import { Action, - Reducer, applyMiddleware, combineReducers, createAction, createStore, + Reducer, } from './redux'; // Dummy Reducer diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx index 377848fe3ae..48dcd3dcce1 100644 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ b/tgui/packages/tgui-bench/entrypoint.tsx @@ -4,8 +4,10 @@ * @license MIT */ -import { setupGlobalEvents } from 'tgui/events'; import 'tgui/styles/main.scss'; + +import { setupGlobalEvents } from 'tgui/events'; + import Benchmark from './lib/benchmark'; const sendMessage = (obj: any) => { diff --git a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx index 757a4291a0b..376d27a9115 100644 --- a/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx +++ b/tgui/packages/tgui-bench/tests/DisposalUnit.test.tsx @@ -1,8 +1,7 @@ -import { configureStore } from 'tgui/store'; - -import { DisposalUnit } from 'tgui/interfaces/DisposalUnit'; import { backendUpdate, setGlobalStore } from 'tgui/backend'; +import { DisposalUnit } from 'tgui/interfaces/DisposalUnit'; import { createRenderer } from 'tgui/renderer'; +import { configureStore } from 'tgui/store'; const store = configureStore({ sideEffects: false }); diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js index af4bfe891cb..d1ca2a9ac53 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -6,6 +6,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; import { require } from './require.js'; diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js index 199e93d8363..85489ebb049 100644 --- a/tgui/packages/tgui-dev-server/index.js +++ b/tgui/packages/tgui-dev-server/index.js @@ -4,8 +4,8 @@ * @license MIT */ -import { createCompiler } from './webpack.js'; import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; const noHot = process.argv.includes('--no-hot'); const noTmp = process.argv.includes('--no-tmp'); diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index b7f4d4eacfb..083ddb37d1c 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -6,6 +6,7 @@ import fs from 'fs'; import { basename } from 'path'; + import { createLogger } from '../logging.js'; import { require } from '../require.js'; import { resolveGlob } from '../util.js'; diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index 60cc78c1bd9..2a1f551bf6e 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -6,6 +6,7 @@ import http from 'http'; import { inspect } from 'util'; + import { createLogger, directLog } from '../logging.js'; import { require } from '../require.js'; import { loadSourceMaps, retrace } from './retrace.js'; diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index 427d1aecbd6..cb477a6523b 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -7,6 +7,7 @@ import fs from 'fs'; import os from 'os'; import { basename } from 'path'; + import { DreamSeeker } from './dreamseeker.js'; import { createLogger } from './logging.js'; import { resolveGlob, resolvePath } from './util.js'; diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 9d07b96c71a..79190fe189a 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -6,6 +6,7 @@ import fs from 'fs'; import path from 'path'; + import { require } from './require.js'; const globPkg = require('glob'); diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 139610b79ce..e4fbdeb9f1e 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -7,6 +7,7 @@ import fs from 'fs'; import { createRequire } from 'module'; import { dirname } from 'path'; + import { loadSourceMaps, setupLink } from './link/server.js'; import { createLogger } from './logging.js'; import { reloadByondCache } from './reloader.js'; diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index b61fddc1a25..4f66d715950 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -8,6 +8,7 @@ import { exec } from 'child_process'; import { promisify } from 'util'; + import { createLogger } from './logging.js'; const logger = createLogger('winreg'); diff --git a/tgui/packages/tgui-panel/Panel.tsx b/tgui/packages/tgui-panel/Panel.tsx index 04182f5eb6e..2813b636574 100644 --- a/tgui/packages/tgui-panel/Panel.tsx +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -6,6 +6,7 @@ import { Button, Section, Stack } from 'tgui/components'; import { Pane } from 'tgui/layouts'; + import { NowPlayingWidget, useAudio } from './audio'; import { ChatPanel, ChatTabs } from './chat'; import { useGame } from './game'; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx index 903dacf284c..f101d7da038 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx @@ -7,6 +7,7 @@ import { toFixed } from 'common/math'; import { useDispatch, useSelector } from 'tgui/backend'; import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; + import { useSettings } from '../settings'; import { selectAudio } from './selectors'; diff --git a/tgui/packages/tgui-panel/audio/hooks.ts b/tgui/packages/tgui-panel/audio/hooks.ts index 1286754a37d..2e9d830cb77 100644 --- a/tgui/packages/tgui-panel/audio/hooks.ts +++ b/tgui/packages/tgui-panel/audio/hooks.ts @@ -4,7 +4,8 @@ * @license MIT */ -import { useSelector, useDispatch } from 'tgui/backend'; +import { useDispatch, useSelector } from 'tgui/backend'; + import { selectAudio } from './selectors'; export const useAudio = () => { diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx index d380979dbd3..67028168f8e 100644 --- a/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx @@ -13,6 +13,7 @@ import { Section, Stack, } from 'tgui/components'; + import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions'; import { MESSAGE_TYPES } from './constants'; import { selectCurrentChatPage } from './selectors'; diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.jsx b/tgui/packages/tgui-panel/chat/ChatPanel.jsx index 36e86876f50..845c1612756 100644 --- a/tgui/packages/tgui-panel/chat/ChatPanel.jsx +++ b/tgui/packages/tgui-panel/chat/ChatPanel.jsx @@ -7,6 +7,7 @@ import { shallowDiffers } from 'common/react'; import { Component, createRef } from 'react'; import { Button } from 'tgui/components'; + import { chatRenderer } from './renderer'; export class ChatPanel extends Component { diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.jsx b/tgui/packages/tgui-panel/chat/ChatTabs.jsx index ed3a285c204..2031f6a255b 100644 --- a/tgui/packages/tgui-panel/chat/ChatTabs.jsx +++ b/tgui/packages/tgui-panel/chat/ChatTabs.jsx @@ -5,10 +5,11 @@ */ import { useDispatch, useSelector } from 'tgui/backend'; -import { Box, Tabs, Flex, Button } from 'tgui/components'; -import { changeChatPage, addChatPage } from './actions'; -import { selectChatPages, selectCurrentChatPage } from './selectors'; +import { Box, Button, Flex, Tabs } from 'tgui/components'; + import { openChatSettings } from '../settings/actions'; +import { addChatPage, changeChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; const UnreadCountWidget = ({ value }) => ( type.startsWith(MESSAGE_TYPE_INTERNAL) || page.acceptedTypes[type]; diff --git a/tgui/packages/tgui-panel/chat/reducer.js b/tgui/packages/tgui-panel/chat/reducer.js index e75fbd06e43..7a7681ada74 100644 --- a/tgui/packages/tgui-panel/chat/reducer.js +++ b/tgui/packages/tgui-panel/chat/reducer.js @@ -7,12 +7,12 @@ import { addChatPage, changeChatPage, + changeScrollTracking, loadChat, removeChatPage, toggleAcceptedType, updateChatPage, updateMessageCount, - changeScrollTracking, } from './actions'; import { canPageAcceptType, createMainPage } from './model'; diff --git a/tgui/packages/tgui-panel/chat/renderer.jsx b/tgui/packages/tgui-panel/chat/renderer.jsx index e52007c5f72..899839e56cc 100644 --- a/tgui/packages/tgui-panel/chat/renderer.jsx +++ b/tgui/packages/tgui-panel/chat/renderer.jsx @@ -6,7 +6,10 @@ import { EventEmitter } from 'common/events'; import { classes } from 'common/react'; +import { render } from 'react-dom'; +import { Tooltip } from 'tgui/components'; import { createLogger } from 'tgui/logging'; + import { COMBINE_MAX_MESSAGES, COMBINE_MAX_TIME_WINDOW, @@ -16,14 +19,12 @@ import { MAX_PERSISTED_MESSAGES, MAX_VISIBLE_MESSAGES, MESSAGE_PRUNE_INTERVAL, - MESSAGE_TYPES, MESSAGE_TYPE_INTERNAL, MESSAGE_TYPE_UNKNOWN, + MESSAGE_TYPES, } from './constants'; -import { render } from 'react-dom'; import { canPageAcceptType, createMessage, isSameMessage } from './model'; import { highlightNode, linkifyNode } from './replaceInTextNode'; -import { Tooltip } from 'tgui/components'; const logger = createLogger('chatRenderer'); diff --git a/tgui/packages/tgui-panel/game/hooks.ts b/tgui/packages/tgui-panel/game/hooks.ts index c3e7c062847..40a74ff44a0 100644 --- a/tgui/packages/tgui-panel/game/hooks.ts +++ b/tgui/packages/tgui-panel/game/hooks.ts @@ -5,6 +5,7 @@ */ import { useSelector } from 'tgui/backend'; + import { selectGame } from './selectors'; export const useGame = () => { diff --git a/tgui/packages/tgui-panel/game/middleware.js b/tgui/packages/tgui-panel/game/middleware.js index 53dd45bb46e..1cf80a7ac63 100644 --- a/tgui/packages/tgui-panel/game/middleware.js +++ b/tgui/packages/tgui-panel/game/middleware.js @@ -6,8 +6,8 @@ import { pingSoft, pingSuccess } from '../ping/actions'; import { connectionLost, connectionRestored, roundRestarted } from './actions'; -import { selectGame } from './selectors'; import { CONNECTION_LOST_AFTER } from './constants'; +import { selectGame } from './selectors'; const withTimestamp = (action) => ({ ...action, diff --git a/tgui/packages/tgui-panel/index.tsx b/tgui/packages/tgui-panel/index.tsx index 32bb8fe6cce..a70a53bac25 100644 --- a/tgui/packages/tgui-panel/index.tsx +++ b/tgui/packages/tgui-panel/index.tsx @@ -10,11 +10,13 @@ import './styles/themes/light.scss'; import { perf } from 'common/perf'; import { combineReducers } from 'common/redux'; -import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; +import { setGlobalStore } from 'tgui/backend'; import { setupGlobalEvents } from 'tgui/events'; import { captureExternalLinks } from 'tgui/links'; import { createRenderer } from 'tgui/renderer'; import { configureStore } from 'tgui/store'; +import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; + import { audioMiddleware, audioReducer } from './audio'; import { chatMiddleware, chatReducer } from './chat'; import { gameMiddleware, gameReducer } from './game'; @@ -22,7 +24,6 @@ import { setupPanelFocusHacks } from './panelFocus'; import { pingMiddleware, pingReducer } from './ping'; import { settingsMiddleware, settingsReducer } from './settings'; import { telemetryMiddleware } from './telemetry'; -import { setGlobalStore } from 'tgui/backend'; perf.mark('inception', window.performance?.timing?.navigationStart); perf.mark('init'); diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.jsx b/tgui/packages/tgui-panel/ping/PingIndicator.jsx index b2355820e58..549cd09cf74 100644 --- a/tgui/packages/tgui-panel/ping/PingIndicator.jsx +++ b/tgui/packages/tgui-panel/ping/PingIndicator.jsx @@ -8,6 +8,7 @@ import { Color } from 'common/color'; import { toFixed } from 'common/math'; import { useSelector } from 'tgui/backend'; import { Box } from 'tgui/components'; + import { selectPing } from './selectors'; export const PingIndicator = (props) => { diff --git a/tgui/packages/tgui-panel/ping/reducer.ts b/tgui/packages/tgui-panel/ping/reducer.ts index 55d40eeb46f..10531d23d84 100644 --- a/tgui/packages/tgui-panel/ping/reducer.ts +++ b/tgui/packages/tgui-panel/ping/reducer.ts @@ -5,6 +5,7 @@ */ import { clamp01, scale } from 'common/math'; + import { pingFail, pingSuccess } from './actions'; import { PING_MAX_FAILS, diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx index d803c63cb16..a7c90af8cc9 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx @@ -22,22 +22,23 @@ import { Tabs, TextArea, } from 'tgui/components'; + import { ChatPageSettings } from '../chat'; import { rebuildChat, saveChatToDisk } from '../chat/actions'; import { THEMES } from '../themes'; import { - changeSettingsTab, - updateSettings, addHighlightSetting, + changeSettingsTab, removeHighlightSetting, updateHighlightSetting, + updateSettings, } from './actions'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; +import { FONTS, MAX_HIGHLIGHT_SETTINGS, SETTINGS_TABS } from './constants'; import { selectActiveTab, - selectSettings, - selectHighlightSettings, selectHighlightSettingById, + selectHighlightSettings, + selectSettings, } from './selectors'; export const SettingsPanel = (props) => { diff --git a/tgui/packages/tgui-panel/settings/actions.ts b/tgui/packages/tgui-panel/settings/actions.ts index 52febd21c9c..55e5db11261 100644 --- a/tgui/packages/tgui-panel/settings/actions.ts +++ b/tgui/packages/tgui-panel/settings/actions.ts @@ -5,6 +5,7 @@ */ import { createAction } from 'common/redux'; + import { createHighlightSetting } from './model'; export const updateSettings = createAction('settings/update'); diff --git a/tgui/packages/tgui-panel/settings/hooks.ts b/tgui/packages/tgui-panel/settings/hooks.ts index 5ea91c86067..b37b49a22c8 100644 --- a/tgui/packages/tgui-panel/settings/hooks.ts +++ b/tgui/packages/tgui-panel/settings/hooks.ts @@ -5,7 +5,8 @@ */ import { useDispatch, useSelector } from 'tgui/backend'; -import { updateSettings, toggleSettings } from './actions'; + +import { toggleSettings, updateSettings } from './actions'; import { selectSettings } from './selectors'; export const useSettings = () => { diff --git a/tgui/packages/tgui-panel/settings/middleware.js b/tgui/packages/tgui-panel/settings/middleware.js index 3d3c7744df4..edb16a51c4c 100644 --- a/tgui/packages/tgui-panel/settings/middleware.js +++ b/tgui/packages/tgui-panel/settings/middleware.js @@ -5,16 +5,17 @@ */ import { storage } from 'common/storage'; + import { setClientTheme } from '../themes'; import { - loadSettings, - updateSettings, addHighlightSetting, + loadSettings, removeHighlightSetting, updateHighlightSetting, + updateSettings, } from './actions'; -import { selectSettings } from './selectors'; import { FONTS_DISABLED } from './constants'; +import { selectSettings } from './selectors'; let overrideRule = null; let overrideFontFamily = null; diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js index 17f2af380e8..1240198df8a 100644 --- a/tgui/packages/tgui-panel/settings/reducer.js +++ b/tgui/packages/tgui-panel/settings/reducer.js @@ -5,17 +5,17 @@ */ import { + addHighlightSetting, changeSettingsTab, loadSettings, openChatSettings, - toggleSettings, - updateSettings, - addHighlightSetting, removeHighlightSetting, + toggleSettings, updateHighlightSetting, + updateSettings, } from './actions'; +import { FONTS, MAX_HIGHLIGHT_SETTINGS, SETTINGS_TABS } from './constants'; import { createDefaultHighlightSetting } from './model'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; const defaultHighlightSetting = createDefaultHighlightSetting(); diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx index 9e93b395151..39043a978b8 100644 --- a/tgui/packages/tgui-say/TguiSay.tsx +++ b/tgui/packages/tgui-say/TguiSay.tsx @@ -1,12 +1,13 @@ +import { KEY } from 'common/keys'; +import { BooleanLike } from 'common/react'; +import { Component, createRef, RefObject } from 'react'; +import { dragStartHandler } from 'tgui/drag'; + import { Channel, ChannelIterator } from './ChannelIterator'; import { ChatHistory } from './ChatHistory'; -import { Component, createRef, RefObject } from 'react'; import { LINE_LENGTHS, RADIO_PREFIXES, WINDOW_SIZES } from './constants'; +import { windowClose, windowOpen, windowSet } from './helpers'; import { byondMessages } from './timers'; -import { dragStartHandler } from 'tgui/drag'; -import { windowOpen, windowClose, windowSet } from './helpers'; -import { BooleanLike } from 'common/react'; -import { KEY } from 'common/keys'; type ByondOpen = { channel: Channel; diff --git a/tgui/packages/tgui-say/index.tsx b/tgui/packages/tgui-say/index.tsx index ed512b525ff..d902ae85cdf 100644 --- a/tgui/packages/tgui-say/index.tsx +++ b/tgui/packages/tgui-say/index.tsx @@ -1,5 +1,7 @@ import './styles/main.scss'; + import { createRenderer } from 'tgui/renderer'; + import { TguiSay } from './TguiSay'; const renderApp = createRenderer(() => { diff --git a/tgui/packages/tgui/assets.ts b/tgui/packages/tgui/assets.ts index e519d0c2f76..f62bf652dea 100644 --- a/tgui/packages/tgui/assets.ts +++ b/tgui/packages/tgui/assets.ts @@ -4,10 +4,10 @@ * @license MIT */ -import { Action, AnyAction, Middleware } from '../common/redux'; - import { Dispatch } from 'common/redux'; +import { Action, AnyAction, Middleware } from '../common/redux'; + const EXCLUDED_PATTERNS = [/v4shim/i]; const loadedMappings: Record = {}; diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index 9f865994574..bf75306108a 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -13,6 +13,7 @@ import { perf } from 'common/perf'; import { createAction } from 'common/redux'; + import { setupDrag } from './drag'; import { globalEvents } from './events'; import { focusMap } from './focus'; diff --git a/tgui/packages/tgui/components/BlockQuote.jsx b/tgui/packages/tgui/components/BlockQuote.jsx index 8c0f53a46a1..22508d4b885 100644 --- a/tgui/packages/tgui/components/BlockQuote.jsx +++ b/tgui/packages/tgui/components/BlockQuote.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { Box } from './Box'; export const BlockQuote = (props) => { diff --git a/tgui/packages/tgui/components/BodyZoneSelector.tsx b/tgui/packages/tgui/components/BodyZoneSelector.tsx index f6918489647..3e4f779cfb8 100644 --- a/tgui/packages/tgui/components/BodyZoneSelector.tsx +++ b/tgui/packages/tgui/components/BodyZoneSelector.tsx @@ -1,4 +1,5 @@ import { Component, createRef } from 'react'; + import { resolveAsset } from '../assets'; import { Image } from './Image'; diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx index 5fc037e0761..8952bc31c48 100644 --- a/tgui/packages/tgui/components/Box.tsx +++ b/tgui/packages/tgui/components/Box.tsx @@ -6,6 +6,7 @@ import { BooleanLike, classes } from 'common/react'; import { createElement, ReactNode } from 'react'; + import { CSS_COLORS } from '../constants'; import { logger } from '../logging'; diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx index 7d71ffc57b6..8dd52d9e2ad 100644 --- a/tgui/packages/tgui/components/Button.tsx +++ b/tgui/packages/tgui/components/Button.tsx @@ -8,6 +8,7 @@ import { Placement } from '@popperjs/core'; import { KEY } from 'common/keys'; import { BooleanLike, classes } from 'common/react'; import { createRef, ReactNode, useEffect, useState } from 'react'; + import { Box, BoxProps, computeBoxClassName, computeBoxProps } from './Box'; import { Icon } from './Icon'; import { Tooltip } from './Tooltip'; diff --git a/tgui/packages/tgui/components/ByondUi.jsx b/tgui/packages/tgui/components/ByondUi.jsx index 2914bb89058..c119879dd2a 100644 --- a/tgui/packages/tgui/components/ByondUi.jsx +++ b/tgui/packages/tgui/components/ByondUi.jsx @@ -7,6 +7,7 @@ import { shallowDiffers } from 'common/react'; import { debounce } from 'common/timer'; import { Component, createRef } from 'react'; + import { createLogger } from '../logging'; import { computeBoxProps } from './Box'; diff --git a/tgui/packages/tgui/components/Chart.tsx b/tgui/packages/tgui/components/Chart.tsx index 4d5f6950e92..205dc6fbec1 100644 --- a/tgui/packages/tgui/components/Chart.tsx +++ b/tgui/packages/tgui/components/Chart.tsx @@ -6,6 +6,7 @@ import { map, zipWith } from 'common/collections'; import { Component, createRef, RefObject } from 'react'; + import { Box, BoxProps } from './Box'; type Props = { diff --git a/tgui/packages/tgui/components/Collapsible.jsx b/tgui/packages/tgui/components/Collapsible.jsx index 9fda360b0aa..12f8fe799b8 100644 --- a/tgui/packages/tgui/components/Collapsible.jsx +++ b/tgui/packages/tgui/components/Collapsible.jsx @@ -5,6 +5,7 @@ */ 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 48916efa9b7..672c86ab2cf 100644 --- a/tgui/packages/tgui/components/ColorBox.jsx +++ b/tgui/packages/tgui/components/ColorBox.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from './Box'; export const ColorBox = (props) => { diff --git a/tgui/packages/tgui/components/Dimmer.jsx b/tgui/packages/tgui/components/Dimmer.jsx index 85e046ca0db..5e92ea84fc1 100644 --- a/tgui/packages/tgui/components/Dimmer.jsx +++ b/tgui/packages/tgui/components/Dimmer.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { Box } from './Box'; export const Dimmer = (props) => { diff --git a/tgui/packages/tgui/components/DraggableControl.jsx b/tgui/packages/tgui/components/DraggableControl.jsx index 7a8671c17ff..bb55287b02a 100644 --- a/tgui/packages/tgui/components/DraggableControl.jsx +++ b/tgui/packages/tgui/components/DraggableControl.jsx @@ -6,6 +6,7 @@ import { clamp } from 'common/math'; import { Component, createRef } from 'react'; + import { AnimatedNumber } from './AnimatedNumber'; const DEFAULT_UPDATE_RATE = 400; diff --git a/tgui/packages/tgui/components/Dropdown.tsx b/tgui/packages/tgui/components/Dropdown.tsx index 5d80fd2c379..c015ac5dc22 100644 --- a/tgui/packages/tgui/components/Dropdown.tsx +++ b/tgui/packages/tgui/components/Dropdown.tsx @@ -2,6 +2,7 @@ import { createPopper, VirtualElement } from '@popperjs/core'; import { classes } from 'common/react'; import { Component, ReactNode } from 'react'; import { findDOMNode, render } from 'react-dom'; + import { Box, BoxProps } from './Box'; import { Button } from './Button'; import { Icon } from './Icon'; diff --git a/tgui/packages/tgui/components/FakeTerminal.jsx b/tgui/packages/tgui/components/FakeTerminal.jsx index f97f7e6bf3a..d3b7fbe65db 100644 --- a/tgui/packages/tgui/components/FakeTerminal.jsx +++ b/tgui/packages/tgui/components/FakeTerminal.jsx @@ -1,6 +1,7 @@ -import { Box } from './Box'; import { Component, Fragment } from 'react'; +import { Box } from './Box'; + export class FakeTerminal extends Component { constructor(props) { super(props); diff --git a/tgui/packages/tgui/components/Flex.tsx b/tgui/packages/tgui/components/Flex.tsx index da063f0296f..50dba277958 100644 --- a/tgui/packages/tgui/components/Flex.tsx +++ b/tgui/packages/tgui/components/Flex.tsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { BoxProps, computeBoxClassName, computeBoxProps, unit } from './Box'; export type FlexProps = Partial<{ diff --git a/tgui/packages/tgui/components/Icon.tsx b/tgui/packages/tgui/components/Icon.tsx index e8f7f099e90..6ee5a61fe12 100644 --- a/tgui/packages/tgui/components/Icon.tsx +++ b/tgui/packages/tgui/components/Icon.tsx @@ -8,6 +8,7 @@ import { BooleanLike, classes } from 'common/react'; import { ReactNode } from 'react'; + import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; const FA_OUTLINE_REGEX = /-o$/; diff --git a/tgui/packages/tgui/components/Image.tsx b/tgui/packages/tgui/components/Image.tsx index 82fef68993e..0bb374d5e52 100644 --- a/tgui/packages/tgui/components/Image.tsx +++ b/tgui/packages/tgui/components/Image.tsx @@ -1,4 +1,5 @@ import { ReactNode } from 'react'; + import { BoxProps, computeBoxProps } from './Box'; import { Tooltip } from './Tooltip'; diff --git a/tgui/packages/tgui/components/InfinitePlane.jsx b/tgui/packages/tgui/components/InfinitePlane.jsx index 3f2bf598c23..5277f2ad796 100644 --- a/tgui/packages/tgui/components/InfinitePlane.jsx +++ b/tgui/packages/tgui/components/InfinitePlane.jsx @@ -1,9 +1,10 @@ -import { computeBoxProps } from './Box'; -import { Stack } from './Stack'; -import { ProgressBar } from './ProgressBar'; -import { Button } from './Button'; import { Component } from 'react'; +import { computeBoxProps } from './Box'; +import { Button } from './Button'; +import { ProgressBar } from './ProgressBar'; +import { Stack } from './Stack'; + const ZOOM_MIN_VAL = 0.5; const ZOOM_MAX_VAL = 1.5; diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx index 898ec651fdd..d10cd657f13 100644 --- a/tgui/packages/tgui/components/Input.tsx +++ b/tgui/packages/tgui/components/Input.tsx @@ -7,6 +7,7 @@ import { KEY } from 'common/keys'; import { classes } from 'common/react'; import { KeyboardEvent, SyntheticEvent, useEffect, useRef } from 'react'; + import { Box, BoxProps } from './Box'; type Props = Partial<{ diff --git a/tgui/packages/tgui/components/KeyListener.tsx b/tgui/packages/tgui/components/KeyListener.tsx index d401642a3cf..566026f0cb3 100644 --- a/tgui/packages/tgui/components/KeyListener.tsx +++ b/tgui/packages/tgui/components/KeyListener.tsx @@ -1,4 +1,5 @@ import { Component } from 'react'; + import { KeyEvent } from '../events'; import { listenForKeyEvents } from '../hotkeys'; diff --git a/tgui/packages/tgui/components/Knob.jsx b/tgui/packages/tgui/components/Knob.jsx index 5702c16129a..e9067fc71d6 100644 --- a/tgui/packages/tgui/components/Knob.jsx +++ b/tgui/packages/tgui/components/Knob.jsx @@ -6,6 +6,7 @@ import { keyOfMatchingRange, scale } from 'common/math'; import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from './Box'; import { DraggableControl } from './DraggableControl'; diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx index 0e23cf96683..2c2baa9c34c 100644 --- a/tgui/packages/tgui/components/LabeledList.tsx +++ b/tgui/packages/tgui/components/LabeledList.tsx @@ -6,6 +6,7 @@ import { BooleanLike, classes } from 'common/react'; import { PropsWithChildren, ReactNode } from 'react'; + import { Box, unit } from './Box'; import { Divider } from './Divider'; import { Tooltip } from './Tooltip'; diff --git a/tgui/packages/tgui/components/MenuBar.tsx b/tgui/packages/tgui/components/MenuBar.tsx index 97ded4397db..acf35e82812 100644 --- a/tgui/packages/tgui/components/MenuBar.tsx +++ b/tgui/packages/tgui/components/MenuBar.tsx @@ -6,8 +6,9 @@ import { classes } from 'common/react'; import { Component, createRef, ReactNode, RefObject } from 'react'; -import { Box } from './Box'; + import { logger } from '../logging'; +import { Box } from './Box'; import { Icon } from './Icon'; type MenuProps = { diff --git a/tgui/packages/tgui/components/Modal.jsx b/tgui/packages/tgui/components/Modal.jsx index 0e0181acee6..da17c6e5c84 100644 --- a/tgui/packages/tgui/components/Modal.jsx +++ b/tgui/packages/tgui/components/Modal.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from './Box'; import { Dimmer } from './Dimmer'; diff --git a/tgui/packages/tgui/components/NoticeBox.jsx b/tgui/packages/tgui/components/NoticeBox.jsx index 09e205b46be..de36715cc2e 100644 --- a/tgui/packages/tgui/components/NoticeBox.jsx +++ b/tgui/packages/tgui/components/NoticeBox.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { Box } from './Box'; export const NoticeBox = (props) => { diff --git a/tgui/packages/tgui/components/NumberInput.jsx b/tgui/packages/tgui/components/NumberInput.jsx index 24c7a7d7ac0..f5579731c0b 100644 --- a/tgui/packages/tgui/components/NumberInput.jsx +++ b/tgui/packages/tgui/components/NumberInput.jsx @@ -7,6 +7,7 @@ import { clamp } from 'common/math'; import { classes } from 'common/react'; import { Component, createRef } from 'react'; + import { AnimatedNumber } from './AnimatedNumber'; import { Box } from './Box'; diff --git a/tgui/packages/tgui/components/ProgressBar.tsx b/tgui/packages/tgui/components/ProgressBar.tsx index 23eef869dfd..9cb442479ea 100644 --- a/tgui/packages/tgui/components/ProgressBar.tsx +++ b/tgui/packages/tgui/components/ProgressBar.tsx @@ -4,12 +4,13 @@ * @license MIT */ -import { clamp01, scale, keyOfMatchingRange, toFixed } from 'common/math'; +import { clamp01, keyOfMatchingRange, scale, toFixed } from 'common/math'; import { classes } from 'common/react'; -import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; -import { CSS_COLORS } from '../constants'; import { PropsWithChildren } from 'react'; +import { CSS_COLORS } from '../constants'; +import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; + type Props = { value: number; } & Partial<{ diff --git a/tgui/packages/tgui/components/RestrictedInput.jsx b/tgui/packages/tgui/components/RestrictedInput.jsx index 362510fbfa5..3125545bae1 100644 --- a/tgui/packages/tgui/components/RestrictedInput.jsx +++ b/tgui/packages/tgui/components/RestrictedInput.jsx @@ -1,8 +1,9 @@ -import { classes } from 'common/react'; +import { KEY_ENTER, KEY_ESCAPE } from 'common/keycodes'; import { clamp } from 'common/math'; +import { classes } from 'common/react'; import { Component, createRef } from 'react'; + import { Box } from './Box'; -import { KEY_ESCAPE, KEY_ENTER } from 'common/keycodes'; const DEFAULT_MIN = 0; const DEFAULT_MAX = 10000; diff --git a/tgui/packages/tgui/components/RoundGauge.jsx b/tgui/packages/tgui/components/RoundGauge.jsx index 4bbaee433d6..652875f641e 100644 --- a/tgui/packages/tgui/components/RoundGauge.jsx +++ b/tgui/packages/tgui/components/RoundGauge.jsx @@ -6,6 +6,7 @@ import { clamp01, keyOfMatchingRange, scale } from 'common/math'; import { classes } from 'common/react'; + import { AnimatedNumber } from './AnimatedNumber'; import { Box, computeBoxClassName, computeBoxProps } from './Box'; diff --git a/tgui/packages/tgui/components/Section.tsx b/tgui/packages/tgui/components/Section.tsx index 6640f5a99e0..8c9b8639f5d 100644 --- a/tgui/packages/tgui/components/Section.tsx +++ b/tgui/packages/tgui/components/Section.tsx @@ -4,10 +4,11 @@ * @license MIT */ -import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; -import { forwardRef, ReactNode, RefObject, useEffect } from 'react'; -import { addScrollableNode, removeScrollableNode } from '../events'; import { canRender, classes } from 'common/react'; +import { forwardRef, ReactNode, RefObject, useEffect } from 'react'; + +import { addScrollableNode, removeScrollableNode } from '../events'; +import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; export type SectionProps = Partial<{ buttons: ReactNode; diff --git a/tgui/packages/tgui/components/Slider.jsx b/tgui/packages/tgui/components/Slider.jsx index aa84a417287..7f1aa457c7b 100644 --- a/tgui/packages/tgui/components/Slider.jsx +++ b/tgui/packages/tgui/components/Slider.jsx @@ -6,6 +6,7 @@ import { clamp01, keyOfMatchingRange, scale } from 'common/math'; import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from './Box'; import { DraggableControl } from './DraggableControl'; diff --git a/tgui/packages/tgui/components/Stack.tsx b/tgui/packages/tgui/components/Stack.tsx index 223d4632bbb..18ae34c09e8 100644 --- a/tgui/packages/tgui/components/Stack.tsx +++ b/tgui/packages/tgui/components/Stack.tsx @@ -6,6 +6,7 @@ import { classes } from 'common/react'; import { RefObject } from 'react'; + import { computeFlexClassName, computeFlexItemClassName, diff --git a/tgui/packages/tgui/components/StyleableSection.tsx b/tgui/packages/tgui/components/StyleableSection.tsx index 8a1ea48edb9..53b193707f6 100644 --- a/tgui/packages/tgui/components/StyleableSection.tsx +++ b/tgui/packages/tgui/components/StyleableSection.tsx @@ -1,4 +1,5 @@ import { PropsWithChildren, ReactNode } from 'react'; + import { Box } from './Box'; type Props = Partial<{ diff --git a/tgui/packages/tgui/components/Table.jsx b/tgui/packages/tgui/components/Table.jsx index f9a59b36c7f..31a0a82d041 100644 --- a/tgui/packages/tgui/components/Table.jsx +++ b/tgui/packages/tgui/components/Table.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from './Box'; export const Table = (props) => { diff --git a/tgui/packages/tgui/components/Tabs.tsx b/tgui/packages/tgui/components/Tabs.tsx index 822ce2d89dd..84779bcf748 100644 --- a/tgui/packages/tgui/components/Tabs.tsx +++ b/tgui/packages/tgui/components/Tabs.tsx @@ -6,6 +6,7 @@ import { canRender, classes } from 'common/react'; import { PropsWithChildren, ReactNode } from 'react'; + import { BoxProps, computeBoxClassName, computeBoxProps } from './Box'; import { Icon } from './Icon'; diff --git a/tgui/packages/tgui/components/TextArea.tsx b/tgui/packages/tgui/components/TextArea.tsx index cc6376d0de2..71b3f3e1bda 100644 --- a/tgui/packages/tgui/components/TextArea.tsx +++ b/tgui/packages/tgui/components/TextArea.tsx @@ -5,20 +5,21 @@ * @license MIT */ +import { KEY } from 'common/keys'; import { classes } from 'common/react'; import { forwardRef, - useEffect, - useState, RefObject, - useRef, + useEffect, useImperativeHandle, + useRef, + useState, } from 'react'; -import { toInputValue } from './Input'; -import { KEY } from 'common/keys'; -import { Box, BoxProps } from './Box'; import { ChangeEvent, KeyboardEvent } from 'react'; +import { Box, BoxProps } from './Box'; +import { toInputValue } from './Input'; + type Props = Partial<{ autoFocus: boolean; autoSelect: boolean; diff --git a/tgui/packages/tgui/components/TimeDisplay.jsx b/tgui/packages/tgui/components/TimeDisplay.jsx index bbdd747701c..390dbc93af9 100644 --- a/tgui/packages/tgui/components/TimeDisplay.jsx +++ b/tgui/packages/tgui/components/TimeDisplay.jsx @@ -1,6 +1,7 @@ -import { formatTime } from '../format'; import { Component } from 'react'; +import { formatTime } from '../format'; + // AnimatedNumber Copypaste const isSafeNumber = (value) => { return ( diff --git a/tgui/packages/tgui/components/index.ts b/tgui/packages/tgui/components/index.ts index d80508360a2..556b2933e5a 100644 --- a/tgui/packages/tgui/components/index.ts +++ b/tgui/packages/tgui/components/index.ts @@ -14,12 +14,13 @@ export { ByondUi } from './ByondUi'; export { Chart } from './Chart'; export { Collapsible } from './Collapsible'; export { ColorBox } from './ColorBox'; +export { Dialog } from './Dialog'; export { Dimmer } from './Dimmer'; export { Divider } from './Divider'; export { DraggableControl } from './DraggableControl'; export { Dropdown } from './Dropdown'; -export { Flex } from './Flex'; export { FitText } from './FitText'; +export { Flex } from './Flex'; export { Grid } from './Grid'; export { Icon } from './Icon'; export { Image } from './Image'; @@ -33,18 +34,17 @@ export { MenuBar } from './MenuBar'; export { Modal } from './Modal'; export { NoticeBox } from './NoticeBox'; export { NumberInput } from './NumberInput'; -export { ProgressBar } from './ProgressBar'; export { Popper } from './Popper'; +export { ProgressBar } from './ProgressBar'; export { RestrictedInput } from './RestrictedInput'; export { RoundGauge } from './RoundGauge'; export { Section } from './Section'; export { Slider } from './Slider'; -export { StyleableSection } from './StyleableSection'; export { Stack } from './Stack'; +export { StyleableSection } from './StyleableSection'; export { Table } from './Table'; export { Tabs } from './Tabs'; export { TextArea } from './TextArea'; export { TimeDisplay } from './TimeDisplay'; -export { TrackOutsideClicks } from './TrackOutsideClicks'; export { Tooltip } from './Tooltip'; -export { Dialog } from './Dialog'; +export { TrackOutsideClicks } from './TrackOutsideClicks'; diff --git a/tgui/packages/tgui/debug/middleware.js b/tgui/packages/tgui/debug/middleware.js index 821582df0bb..3f7414335e8 100644 --- a/tgui/packages/tgui/debug/middleware.js +++ b/tgui/packages/tgui/debug/middleware.js @@ -5,6 +5,7 @@ */ import { KEY_BACKSPACE, KEY_F10, KEY_F11, KEY_F12 } from 'common/keycodes'; + import { globalEvents } from '../events'; import { acquireHotKey } from '../hotkeys'; import { diff --git a/tgui/packages/tgui/drag.ts b/tgui/packages/tgui/drag.ts index ee0b312dd2b..584666a97a6 100644 --- a/tgui/packages/tgui/drag.ts +++ b/tgui/packages/tgui/drag.ts @@ -4,10 +4,10 @@ * @license MIT */ +import { storage } from 'common/storage'; import { vecAdd, vecMultiply, vecScale, vecSubtract } from 'common/vector'; import { createLogger } from './logging'; -import { storage } from 'common/storage'; const logger = createLogger('drag'); const pixelRatio = window.devicePixelRatio ?? 1; diff --git a/tgui/packages/tgui/events.test.ts b/tgui/packages/tgui/events.test.ts index c5c4c7f2d78..e7a6c250188 100644 --- a/tgui/packages/tgui/events.test.ts +++ b/tgui/packages/tgui/events.test.ts @@ -1,7 +1,7 @@ import { - KeyEvent, addScrollableNode, canStealFocus, + KeyEvent, removeScrollableNode, setupGlobalEvents, } from './events'; diff --git a/tgui/packages/tgui/events.ts b/tgui/packages/tgui/events.ts index 2fceac45f90..a31f4821d6e 100644 --- a/tgui/packages/tgui/events.ts +++ b/tgui/packages/tgui/events.ts @@ -6,9 +6,8 @@ * @license MIT */ -import { KEY_ALT, KEY_CTRL, KEY_F1, KEY_F12, KEY_SHIFT } from 'common/keycodes'; - import { EventEmitter } from 'common/events'; +import { KEY_ALT, KEY_CTRL, KEY_F1, KEY_F12, KEY_SHIFT } from 'common/keycodes'; export const globalEvents = new EventEmitter(); let ignoreWindowFocus = false; diff --git a/tgui/packages/tgui/hotkeys.ts b/tgui/packages/tgui/hotkeys.ts index f7176bd0030..be3121bf540 100644 --- a/tgui/packages/tgui/hotkeys.ts +++ b/tgui/packages/tgui/hotkeys.ts @@ -5,6 +5,7 @@ */ import * as keycodes from 'common/keycodes'; + import { globalEvents, KeyEvent } from './events'; import { createLogger } from './logging'; diff --git a/tgui/packages/tgui/index.tsx b/tgui/packages/tgui/index.tsx index 13c9356603b..223e532ff79 100644 --- a/tgui/packages/tgui/index.tsx +++ b/tgui/packages/tgui/index.tsx @@ -27,17 +27,17 @@ import './styles/themes/wizard.scss'; import './styles/themes/admin.scss'; // SKYRAT ADDITION START import './styles/themes/clockwork.scss'; + // SKYRAT ADDITION END - -import { configureStore } from './store'; - -import { captureExternalLinks } from './links'; -import { createRenderer } from './renderer'; import { perf } from 'common/perf'; +import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; + +import { setGlobalStore } from './backend'; import { setupGlobalEvents } from './events'; import { setupHotKeys } from './hotkeys'; -import { setupHotReloading } from 'tgui-dev-server/link/client.cjs'; -import { setGlobalStore } from './backend'; +import { captureExternalLinks } from './links'; +import { createRenderer } from './renderer'; +import { configureStore } from './store'; perf.mark('inception', window.performance?.timing?.navigationStart); perf.mark('init'); diff --git a/tgui/packages/tgui/interfaces/AccountingConsole.tsx b/tgui/packages/tgui/interfaces/AccountingConsole.tsx index a3f23627753..1e8465c93be 100644 --- a/tgui/packages/tgui/interfaces/AccountingConsole.tsx +++ b/tgui/packages/tgui/interfaces/AccountingConsole.tsx @@ -1,3 +1,7 @@ +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; import { BlockQuote, Collapsible, @@ -6,10 +10,7 @@ import { Stack, Tabs, } from '../components'; -import { useBackend } from '../backend'; import { Window } from '../layouts'; -import { BooleanLike } from 'common/react'; -import { useState } from 'react'; type Data = { PlayerAccounts: PlayerAccount[]; diff --git a/tgui/packages/tgui/interfaces/Achievements.jsx b/tgui/packages/tgui/interfaces/Achievements.jsx index bef15df4bc0..b20df1025cf 100644 --- a/tgui/packages/tgui/interfaces/Achievements.jsx +++ b/tgui/packages/tgui/interfaces/Achievements.jsx @@ -1,7 +1,8 @@ +import { useState } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, Flex, Icon, Table, Tabs, Tooltip } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; export const Achievements = (props) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/AdminFax.jsx b/tgui/packages/tgui/interfaces/AdminFax.jsx index 47ab1d93660..2ecc8974d42 100644 --- a/tgui/packages/tgui/interfaces/AdminFax.jsx +++ b/tgui/packages/tgui/interfaces/AdminFax.jsx @@ -1,15 +1,15 @@ import { useBackend, useLocalState } from '../backend'; import { - Section, Box, - Dropdown, Button, - Input, - TextArea, Divider, - NumberInput, - Tooltip, + Dropdown, + Input, Knob, + NumberInput, + Section, + TextArea, + Tooltip, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/AdminPDA.jsx b/tgui/packages/tgui/interfaces/AdminPDA.jsx index 84d165a4bfa..09570265a20 100644 --- a/tgui/packages/tgui/interfaces/AdminPDA.jsx +++ b/tgui/packages/tgui/interfaces/AdminPDA.jsx @@ -1,5 +1,5 @@ -import { Section, Dropdown, Input, Box, TextArea } from '../components'; import { useBackend, useLocalState } from '../backend'; +import { Box, Dropdown, Input, Section, TextArea } from '../components'; import { Button } from '../components/Button'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Adminhelp.tsx b/tgui/packages/tgui/interfaces/Adminhelp.tsx index 7bc5308b48a..7e29a807f1d 100644 --- a/tgui/packages/tgui/interfaces/Adminhelp.tsx +++ b/tgui/packages/tgui/interfaces/Adminhelp.tsx @@ -1,7 +1,8 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; + import { useBackend } from '../backend'; -import { TextArea, Stack, Button, NoticeBox, Input, Box } from '../components'; +import { Box, Button, Input, NoticeBox, Stack, TextArea } from '../components'; import { Window } from '../layouts'; type AdminhelpData = { diff --git a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx b/tgui/packages/tgui/interfaces/AdventureBrowser.tsx index 53e1389f04d..cb43f6f319d 100644 --- a/tgui/packages/tgui/interfaces/AdventureBrowser.tsx +++ b/tgui/packages/tgui/interfaces/AdventureBrowser.tsx @@ -1,8 +1,8 @@ import { useBackend, useLocalState } from '../backend'; -import { Button, Section, Box, NoticeBox, Table } from '../components'; +import { Box, Button, NoticeBox, Section, Table } from '../components'; +import { formatTime } from '../format'; import { Window } from '../layouts'; import { AdventureDataProvider, AdventureScreen } from './ExodroneConsole'; -import { formatTime } from '../format'; type Adventure = { ref: string; diff --git a/tgui/packages/tgui/interfaces/AiRestorer.tsx b/tgui/packages/tgui/interfaces/AiRestorer.tsx index 9e3ee15c2a0..1add6b5e934 100644 --- a/tgui/packages/tgui/interfaces/AiRestorer.tsx +++ b/tgui/packages/tgui/interfaces/AiRestorer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx index 09300373e9b..169912df365 100644 --- a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx +++ b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Button, Section, Input, Dropdown, LabeledList } from '../components'; +import { Button, Dropdown, Input, LabeledList, Section } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/AirAlarm.tsx b/tgui/packages/tgui/interfaces/AirAlarm.tsx index b955fccb16b..c42f88d8d83 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.tsx +++ b/tgui/packages/tgui/interfaces/AirAlarm.tsx @@ -1,5 +1,6 @@ import { BooleanLike } from 'common/react'; import { Fragment } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/AirlockElectronics.tsx b/tgui/packages/tgui/interfaces/AirlockElectronics.tsx index d66d90986ed..7e0ebba0bb4 100644 --- a/tgui/packages/tgui/interfaces/AirlockElectronics.tsx +++ b/tgui/packages/tgui/interfaces/AirlockElectronics.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, Input, LabeledList, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/AlertModal.tsx b/tgui/packages/tgui/interfaces/AlertModal.tsx index 54244cfeac5..9caa6835cf9 100644 --- a/tgui/packages/tgui/interfaces/AlertModal.tsx +++ b/tgui/packages/tgui/interfaces/AlertModal.tsx @@ -1,5 +1,3 @@ -import { Loader } from './common/Loader'; -import { useBackend, useLocalState } from '../backend'; import { KEY_ENTER, KEY_ESCAPE, @@ -8,8 +6,10 @@ import { KEY_SPACE, KEY_TAB, } from '../../common/keycodes'; +import { useBackend, useLocalState } from '../backend'; import { Autofocus, Box, Button, Flex, Section, Stack } from '../components'; import { Window } from '../layouts'; +import { Loader } from './common/Loader'; type AlertModalData = { autofocus: boolean; diff --git a/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx b/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx index 01193775c4a..137fa132a9b 100644 --- a/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx +++ b/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx @@ -1,22 +1,23 @@ // THIS IS A SKYRAT UI FILE import { toTitleCase } from 'common/string'; +import { useState } from 'react'; + import { useBackend, useSharedState } from '../backend'; import { Box, Button, - NumberInput, - NoticeBox, - ProgressBar, - Section, Flex, - Stack, + NoticeBox, + NumberInput, + ProgressBar, RoundGauge, - Tabs, + Section, + Stack, Table, + Tabs, Tooltip, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; export const AmmoWorkbench = (props) => { const [tab, setTab] = useSharedState('tab', 1); diff --git a/tgui/packages/tgui/interfaces/AnomalyRefinery.jsx b/tgui/packages/tgui/interfaces/AnomalyRefinery.jsx index 7f3f2c2be65..89f95e28c4a 100644 --- a/tgui/packages/tgui/interfaces/AnomalyRefinery.jsx +++ b/tgui/packages/tgui/interfaces/AnomalyRefinery.jsx @@ -1,12 +1,12 @@ import { useBackend, useSharedState } from '../backend'; import { + Box, Button, Icon, + LabeledList, Modal, Section, Stack, - LabeledList, - Box, } from '../components'; import { Window } from '../layouts'; import { GasmixParser } from './common/GasmixParser'; diff --git a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx index 0966ec9ce7e..3a121feeaa8 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx @@ -1,19 +1,20 @@ // THIS IS A SKYRAT UI FILE +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { - LabeledList, - Stack, - Button, - Section, - ProgressBar, Box, - Tabs, + Button, Divider, + LabeledList, + ProgressBar, + Section, + Stack, + Tabs, } from '../components'; -import { BooleanLike } from 'common/react'; import { Window } from '../layouts'; import { Rules } from './AntagInfoRules'; -import { useState } from 'react'; type Objectives = { count: number; diff --git a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx index 9ea5799e26c..058c2fe2fbf 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx @@ -7,12 +7,9 @@ import { Section, Stack, } from '../components'; -import { Objective } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END - import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION +import { Objective } from './common/Objectives'; type Data = { color: string; diff --git a/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx b/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx index 2587850b8fb..a506171504a 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBrainwashed.tsx @@ -1,7 +1,7 @@ import { useBackend } from '../backend'; import { Box, Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; +import { Objective, ObjectivePrintout } from './common/Objectives'; type Data = { objectives: Objective[]; diff --git a/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx b/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx index 07e183ec469..294fc101135 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBrother.tsx @@ -1,7 +1,7 @@ import { useBackend } from '../backend'; import { Section, Stack } from '../components'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; +import { Objective, ObjectivePrintout } from './common/Objectives'; type Info = { antag_name: string; diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx index ec6f14e7b26..ea7b77cd033 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx @@ -1,24 +1,23 @@ import { BooleanLike } from 'common/react'; import { multiline } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Button, Dimmer, Dropdown, + NoticeBox, Section, Stack, - NoticeBox, } from '../components'; import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION import { - ObjectivePrintout, Objective, + ObjectivePrintout, ReplaceObjectivesButton, } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END const hivestyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx b/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx index deb2383f12a..1dceb6a60a6 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoDemon.tsx @@ -1,8 +1,9 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Section, Stack } from '../components'; -import { BooleanLike } from 'common/react'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; +import { Objective, ObjectivePrintout } from './common/Objectives'; const jauntstyle = { color: 'lightblue', diff --git a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx index 355d31d39d4..ff6eb51c913 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx @@ -1,10 +1,8 @@ import { useBackend } from '../backend'; import { Section, Stack } from '../components'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION +import { Objective, ObjectivePrintout } from './common/Objectives'; type Info = { antag_name: string; diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx index 64b4af8b0ea..d2786748357 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx @@ -1,16 +1,15 @@ -import { useBackend } from '../backend'; -import { Section, Stack, Box, Tabs, Button, BlockQuote } from '../components'; -import { Window } from '../layouts'; import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { BlockQuote, Box, Button, Section, Stack, Tabs } from '../components'; +import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION import { - ObjectivePrintout, Objective, + ObjectivePrintout, ReplaceObjectivesButton, } from './common/Objectives'; -import { useState } from 'react'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END const hereticRed = { color: '#e03c3c', diff --git a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx index b81143c1263..1bfa4c7db80 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx @@ -1,18 +1,17 @@ -import { useBackend } from '../backend'; -import { multiline } from 'common/string'; -import { GenericUplink, Item } from './Uplink/GenericUplink'; -import { BlockQuote, Button, Section, Stack, Tabs } from '../components'; import { BooleanLike } from 'common/react'; +import { multiline } from 'common/string'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { BlockQuote, Button, Section, Stack, Tabs } from '../components'; import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION import { - ObjectivePrintout, Objective, + ObjectivePrintout, ReplaceObjectivesButton, } from './common/Objectives'; -import { useState } from 'react'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END +import { GenericUplink, Item } from './Uplink/GenericUplink'; const allystyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx index a9468f761b4..1a1321c6c28 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx @@ -1,8 +1,6 @@ import { BlockQuote, Stack } from '../components'; import { Window } from '../layouts'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION const goodstyle = { color: 'lightgreen', diff --git a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx index ca8d140a4e0..9cd852db704 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx @@ -1,8 +1,6 @@ import { BlockQuote, LabeledList, Section, Stack } from '../components'; import { Window } from '../layouts'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION const tipstyle = { color: 'white', diff --git a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx index ffa628e60f8..b8a7ca96987 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx @@ -1,15 +1,14 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION import { - ObjectivePrintout, Objective, + ObjectivePrintout, ReplaceObjectivesButton, } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END const ninja_emphasis = { color: 'red', diff --git a/tgui/packages/tgui/interfaces/AntagInfoOpfor.tsx b/tgui/packages/tgui/interfaces/AntagInfoOpfor.tsx index 48abbfce64a..cd344af8619 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoOpfor.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoOpfor.tsx @@ -1,7 +1,7 @@ // THIS IS A SKYRAT UI FILE -import { Section, Stack, Button } from '../components'; -import { Window } from '../layouts'; import { useBackend } from '../backend'; +import { Button, Section, Stack } from '../components'; +import { Window } from '../layouts'; export const AntagInfoOpfor = (props) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx b/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx index 2a10fe0b1fe..1a14c6203c6 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoSeparatist.tsx @@ -1,7 +1,7 @@ import { useBackend } from '../backend'; import { Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; +import { Objective, ObjectivePrintout } from './common/Objectives'; type Info = { objectives: Objective[]; diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx index 53fd7c989be..049a70313b8 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx @@ -1,12 +1,11 @@ -import { useBackend } from '../backend'; -import { multiline } from 'common/string'; -import { BlockQuote, Button, Dimmer, Section, Stack } from '../components'; import { BooleanLike } from 'common/react'; +import { multiline } from 'common/string'; + +import { useBackend } from '../backend'; +import { BlockQuote, Button, Dimmer, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { ObjectivePrintout, Objective } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION +import { Objective, ObjectivePrintout } from './common/Objectives'; const allystyle = { fontWeight: 'bold', diff --git a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx index 371921d44d6..c726bf9bee8 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx @@ -1,15 +1,14 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Section, Stack } from '../components'; import { Window } from '../layouts'; +import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION import { - ObjectivePrintout, Objective, + ObjectivePrintout, ReplaceObjectivesButton, } from './common/Objectives'; -// SKYRAT EDIT BEGIN -import { Rules } from './AntagInfoRules'; -// SKYRAT EDIT END const teleportstyle = { color: 'yellow', diff --git a/tgui/packages/tgui/interfaces/ApcControl.jsx b/tgui/packages/tgui/interfaces/ApcControl.jsx index 5b708c5e65d..01e0126aaab 100644 --- a/tgui/packages/tgui/interfaces/ApcControl.jsx +++ b/tgui/packages/tgui/interfaces/ApcControl.jsx @@ -1,15 +1,16 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; + import { useBackend, useLocalState } from '../backend'; import { Box, Button, Dimmer, Icon, + Section, + Stack, Table, Tabs, - Stack, - Section, } from '../components'; import { Window } from '../layouts'; import { AreaCharge, powerRank } from './PowerMonitor'; diff --git a/tgui/packages/tgui/interfaces/ApprenticeContract.tsx b/tgui/packages/tgui/interfaces/ApprenticeContract.tsx index d1b5a4149b1..2dbd4dbacb0 100644 --- a/tgui/packages/tgui/interfaces/ApprenticeContract.tsx +++ b/tgui/packages/tgui/interfaces/ApprenticeContract.tsx @@ -1,4 +1,5 @@ import { multiline } from 'common/string'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; import { BlockQuote, Box, Button, Icon, Section, Stack } from '../components'; diff --git a/tgui/packages/tgui/interfaces/Aquarium.tsx b/tgui/packages/tgui/interfaces/Aquarium.tsx index 8b83aa60588..e56d5b8da89 100644 --- a/tgui/packages/tgui/interfaces/Aquarium.tsx +++ b/tgui/packages/tgui/interfaces/Aquarium.tsx @@ -1,11 +1,12 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, Flex, Knob, - NumberInput, LabeledControls, + NumberInput, Section, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ArmamentStation.jsx b/tgui/packages/tgui/interfaces/ArmamentStation.jsx index 6a2b3dfac7a..08087f49de2 100644 --- a/tgui/packages/tgui/interfaces/ArmamentStation.jsx +++ b/tgui/packages/tgui/interfaces/ArmamentStation.jsx @@ -1,6 +1,14 @@ // THIS IS A SKYRAT UI FILE import { useBackend, useLocalState } from '../backend'; -import { Section, Stack, Box, Divider, Button, NoticeBox } from '../components'; +import { + Box, + Button, + Divider, + Image, + NoticeBox, + Section, + Stack, +} from '../components'; import { Window } from '../layouts'; export const ArmamentStation = (props) => { @@ -109,21 +117,17 @@ export const ArmamentStation = (props) => { subcat.items.map( (item) => item.ref === weapon && ( - + - - - + + src= + {`data:image/jpeg;base64,${item.icon}`} + height={'100%'} width={'100%'} style= + {{ + 'vertical-align': 'middle', + 'horizontal-align': 'middle', + }} + {item.description} { const [category, setCategory] = useState(''); const [weapon, setArmament] = useState('weapon'); @@ -105,21 +106,17 @@ export const CargoImportConsole = (props) => { subcat.items.map( (item) => item.ref === weapon && ( - + - - - + + src= + {`data:image/jpeg;base64,${item.icon}`} + height={'100%'} width={'100%'} style= + {{ + 'vertical-align': 'middle', + 'horizontal-align': 'middle', + }} + {item.description} {!!cant_buy_restricted && !!item.restricted && ( diff --git a/tgui/packages/tgui/interfaces/CellularEmporium.tsx b/tgui/packages/tgui/interfaces/CellularEmporium.tsx index fd37e9d1031..2573b46c6e1 100644 --- a/tgui/packages/tgui/interfaces/CellularEmporium.tsx +++ b/tgui/packages/tgui/interfaces/CellularEmporium.tsx @@ -1,15 +1,16 @@ import { useState } from 'react'; + import { BooleanLike } from '../../common/react'; import { useBackend } from '../backend'; import { + Box, Button, - Section, Icon, Input, - Stack, LabeledList, - Box, NoticeBox, + Section, + Stack, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CentcomPodLauncher.jsx b/tgui/packages/tgui/interfaces/CentcomPodLauncher.jsx index de4c23be31c..417a716ea24 100644 --- a/tgui/packages/tgui/interfaces/CentcomPodLauncher.jsx +++ b/tgui/packages/tgui/interfaces/CentcomPodLauncher.jsx @@ -4,6 +4,7 @@ import { storage } from 'common/storage'; import { multiline } from 'common/string'; import { createUuid } from 'common/uuid'; import { Component, Fragment } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/ChameleonCard.jsx b/tgui/packages/tgui/interfaces/ChameleonCard.jsx index 5969d926601..42faa04df39 100644 --- a/tgui/packages/tgui/interfaces/ChameleonCard.jsx +++ b/tgui/packages/tgui/interfaces/ChameleonCard.jsx @@ -1,6 +1,6 @@ import { useBackend } from '../backend'; -import { AccessList } from './common/AccessList'; import { Window } from '../layouts'; +import { AccessList } from './common/AccessList'; export const ChameleonCard = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Changelog.jsx b/tgui/packages/tgui/interfaces/Changelog.jsx index 614d0ae221f..6eb4ba1b020 100644 --- a/tgui/packages/tgui/interfaces/Changelog.jsx +++ b/tgui/packages/tgui/interfaces/Changelog.jsx @@ -1,6 +1,10 @@ import { classes } from 'common/react'; -import { useBackend } from '../backend'; +import dateformat from 'dateformat'; +import yaml from 'js-yaml'; import { Component, Fragment } from 'react'; + +import { resolveAsset } from '../assets'; +import { useBackend } from '../backend'; import { Box, Button, @@ -11,9 +15,6 @@ import { Table, } from '../components'; import { Window } from '../layouts'; -import { resolveAsset } from '../assets'; -import dateformat from 'dateformat'; -import yaml from 'js-yaml'; const icons = { add: { icon: 'check-circle', color: 'green' }, diff --git a/tgui/packages/tgui/interfaces/CheckboxInput.tsx b/tgui/packages/tgui/interfaces/CheckboxInput.tsx index 307fdc001bb..4e0f088678b 100644 --- a/tgui/packages/tgui/interfaces/CheckboxInput.tsx +++ b/tgui/packages/tgui/interfaces/CheckboxInput.tsx @@ -1,3 +1,6 @@ +import { createSearch, decodeHtmlEntities } from 'common/string'; + +import { useBackend, useLocalState } from '../backend'; import { Button, Icon, @@ -9,12 +12,9 @@ import { Tooltip, } from '../components'; import { TableCell, TableRow } from '../components/Table'; -import { createSearch, decodeHtmlEntities } from 'common/string'; -import { useBackend, useLocalState } from '../backend'; - +import { Window } from '../layouts'; import { InputButtons } from './common/InputButtons'; import { Loader } from './common/Loader'; -import { Window } from '../layouts'; type Data = { items: string[]; diff --git a/tgui/packages/tgui/interfaces/ChemAcclimator.tsx b/tgui/packages/tgui/interfaces/ChemAcclimator.tsx index 54d9bffa8e7..b0cf2e58114 100644 --- a/tgui/packages/tgui/interfaces/ChemAcclimator.tsx +++ b/tgui/packages/tgui/interfaces/ChemAcclimator.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx index 012711a507d..9efbedd82ce 100644 --- a/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx +++ b/tgui/packages/tgui/interfaces/ChemDebugSynthesizer.tsx @@ -1,7 +1,7 @@ -import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; import { useBackend } from '../backend'; import { Button, NumberInput, Section } from '../components'; import { Window } from '../layouts'; +import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; type Data = { amount: number; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.tsx b/tgui/packages/tgui/interfaces/ChemDispenser.tsx index 3ffa30e3606..e114d5f5b1d 100644 --- a/tgui/packages/tgui/interfaces/ChemDispenser.tsx +++ b/tgui/packages/tgui/interfaces/ChemDispenser.tsx @@ -2,6 +2,7 @@ import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { toTitleCase } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/ChemFilter.tsx b/tgui/packages/tgui/interfaces/ChemFilter.tsx index a316eba06ef..4a6dfd5bc9e 100644 --- a/tgui/packages/tgui/interfaces/ChemFilter.tsx +++ b/tgui/packages/tgui/interfaces/ChemFilter.tsx @@ -1,4 +1,5 @@ import { Fragment } from 'react'; + import { useBackend } from '../backend'; import { Button, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemHeater.jsx b/tgui/packages/tgui/interfaces/ChemHeater.jsx index 9ec8c4c417e..88634b5736e 100644 --- a/tgui/packages/tgui/interfaces/ChemHeater.jsx +++ b/tgui/packages/tgui/interfaces/ChemHeater.jsx @@ -1,4 +1,5 @@ import { round, toFixed } from 'common/math'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; import { diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx index 34e03836d1d..fc7826f6286 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.tsx +++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx @@ -1,20 +1,21 @@ import { BooleanLike, classes } from 'common/react'; import { capitalize } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { AnimatedNumber, Box, Button, - Section, - Table, - NumberInput, - Tooltip, - LabeledList, ColorBox, - ProgressBar, - Stack, Divider, + LabeledList, + NumberInput, + ProgressBar, + Section, + Stack, + Table, + Tooltip, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx b/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx index 193617d6294..c024f92a5fb 100644 --- a/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx +++ b/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx @@ -1,3 +1,7 @@ +import { round, toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { AnimatedNumber, @@ -8,9 +12,6 @@ import { Stack, } from '../components'; import { Window } from '../layouts'; -import { round, toFixed } from 'common/math'; -import { BooleanLike } from 'common/react'; -import { useState } from 'react'; type Reagent = { name: string; diff --git a/tgui/packages/tgui/interfaces/ChemPress.tsx b/tgui/packages/tgui/interfaces/ChemPress.tsx index 028452e4e91..8a6be52a516 100644 --- a/tgui/packages/tgui/interfaces/ChemPress.tsx +++ b/tgui/packages/tgui/interfaces/ChemPress.tsx @@ -1,3 +1,5 @@ +import { capitalizeAll } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Box, @@ -7,7 +9,6 @@ import { NumberInput, Section, } from '../components'; -import { capitalizeAll } from 'common/string'; import { Window } from '../layouts'; type Product = { diff --git a/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx b/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx index dc2fa26b224..05695d3c0f0 100644 --- a/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx +++ b/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx @@ -1,3 +1,5 @@ +import { round, toFixed } from 'common/math'; + import { useBackend, useLocalState } from '../backend'; import { AnimatedNumber, @@ -5,12 +7,11 @@ import { Button, LabeledList, NumberInput, - Section, RoundGauge, + Section, Stack, } from '../components'; import { Window } from '../layouts'; -import { round, toFixed } from 'common/math'; import { MixingData } from './ChemMixingChamber'; type ReactingData = MixingData & { diff --git a/tgui/packages/tgui/interfaces/ChemRecipeDebug.jsx b/tgui/packages/tgui/interfaces/ChemRecipeDebug.jsx index b15439c8ca0..ed47c6f95b8 100644 --- a/tgui/packages/tgui/interfaces/ChemRecipeDebug.jsx +++ b/tgui/packages/tgui/interfaces/ChemRecipeDebug.jsx @@ -1,4 +1,5 @@ import { round } from 'common/math'; + import { useBackend } from '../backend'; import { AnimatedNumber, diff --git a/tgui/packages/tgui/interfaces/ChemSeparator.tsx b/tgui/packages/tgui/interfaces/ChemSeparator.tsx index 93e013e1918..7d6d645f17a 100644 --- a/tgui/packages/tgui/interfaces/ChemSeparator.tsx +++ b/tgui/packages/tgui/interfaces/ChemSeparator.tsx @@ -1,11 +1,12 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, - ProgressBar, - NoticeBox, Button, LabeledList, + NoticeBox, + ProgressBar, Section, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemSplitter.tsx b/tgui/packages/tgui/interfaces/ChemSplitter.tsx index 2380cdba1be..f3d7347cad2 100644 --- a/tgui/packages/tgui/interfaces/ChemSplitter.tsx +++ b/tgui/packages/tgui/interfaces/ChemSplitter.tsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemSynthesizer.tsx b/tgui/packages/tgui/interfaces/ChemSynthesizer.tsx index c60e6def6a3..898ac07b292 100644 --- a/tgui/packages/tgui/interfaces/ChemSynthesizer.tsx +++ b/tgui/packages/tgui/interfaces/ChemSynthesizer.tsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Box, Button, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx index c23a929ad2a..069013c0b7d 100644 --- a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx +++ b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx @@ -1,9 +1,10 @@ -import { useBackend } from '../backend'; -import { Window } from '../layouts'; -import { LabeledList, Button } from '../components'; -import { AccessConfig } from './common/AccessConfig'; import { BooleanLike } from 'common/react'; +import { useBackend } from '../backend'; +import { Button, LabeledList } from '../components'; +import { Window } from '../layouts'; +import { AccessConfig } from './common/AccessConfig'; + type Data = { oneAccess: BooleanLike; regions: string[]; diff --git a/tgui/packages/tgui/interfaces/CircuitAdminPanel.tsx b/tgui/packages/tgui/interfaces/CircuitAdminPanel.tsx index 0793a497ed9..e95c7714dcd 100644 --- a/tgui/packages/tgui/interfaces/CircuitAdminPanel.tsx +++ b/tgui/packages/tgui/interfaces/CircuitAdminPanel.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, Stack, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CircuitModule.jsx b/tgui/packages/tgui/interfaces/CircuitModule.jsx index 1f06316b574..799fea9d15f 100644 --- a/tgui/packages/tgui/interfaces/CircuitModule.jsx +++ b/tgui/packages/tgui/interfaces/CircuitModule.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Stack, Section, Input, Button, Dropdown } from '../components'; +import { Button, Dropdown, Input, Section, Stack } from '../components'; import { Window } from '../layouts'; export const CircuitModule = (props) => { diff --git a/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx b/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx index 4c7510728bb..c1fb5b4bb98 100644 --- a/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx +++ b/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx @@ -1,7 +1,8 @@ import { BooleanLike } from 'common/react'; import { Component, KeyboardEvent } from 'react'; + import { useBackend } from '../backend'; -import { Box, Stack, Section, Input, Button, Dropdown } from '../components'; +import { Box, Button, Dropdown, Input, Section, Stack } from '../components'; import { Window } from '../layouts'; type Response = { diff --git a/tgui/packages/tgui/interfaces/Clipboard.tsx b/tgui/packages/tgui/interfaces/Clipboard.tsx index 60565d76a49..67cb86a1a98 100644 --- a/tgui/packages/tgui/interfaces/Clipboard.tsx +++ b/tgui/packages/tgui/interfaces/Clipboard.tsx @@ -1,11 +1,12 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, Divider, - LabeledList, Flex, + LabeledList, Section, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ClockworkResearch.tsx b/tgui/packages/tgui/interfaces/ClockworkResearch.tsx index 385ce448fb1..9d0a87ac799 100644 --- a/tgui/packages/tgui/interfaces/ClockworkResearch.tsx +++ b/tgui/packages/tgui/interfaces/ClockworkResearch.tsx @@ -1,8 +1,8 @@ // THIS IS A SKYRAT UI FILE -import { useBackend } from '../backend'; -import { Box, Button, Section, Stack, Divider, Flex } from '../components'; -import { Window } from '../layouts'; import { BooleanLike, classes } from '../../common/react'; +import { useBackend } from '../backend'; +import { Box, Button, Divider, Flex, Section, Stack } from '../components'; +import { Window } from '../layouts'; type Data = { research_tiers: Array>; diff --git a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx index f9b0caf1802..63649326f59 100644 --- a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx +++ b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx @@ -1,20 +1,21 @@ // THIS IS A SKYRAT UI FILE import { Fragment } from 'react'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { - Icon, Box, Button, - Section, - Table, + Collapsible, Divider, Grid, + Icon, ProgressBar, - Collapsible, + Section, + Table, } from '../components'; -import { Window } from '../layouts'; import { TableRow } from '../components/Table'; -import { useState } from 'react'; +import { Window } from '../layouts'; const brassColor = '#DFC69C'; const tinkerCache = '#B5FD9D'; diff --git a/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx b/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx index ea28df9942a..2b3ae692915 100644 --- a/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx +++ b/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx @@ -1,12 +1,13 @@ -import { useBackend } from '../backend'; import { toFixed } from 'common/math'; + +import { useBackend } from '../backend'; import { Box, - Stack, - Section, + Button, ByondUi, NumberInput, - Button, + Section, + Stack, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CommandReportConsole.jsx b/tgui/packages/tgui/interfaces/CommandReportConsole.jsx index 5c228f58539..8791d1c416a 100644 --- a/tgui/packages/tgui/interfaces/CommandReportConsole.jsx +++ b/tgui/packages/tgui/interfaces/CommandReportConsole.jsx @@ -2,8 +2,8 @@ import { useBackend } from '../backend'; import { Button, - NoticeBox, Input, + NoticeBox, Section, Stack, TextArea, diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx index 7fb0f5cabd7..e578c468e2a 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx @@ -1,5 +1,6 @@ import { sortBy } from 'common/collections'; import { capitalize } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Blink, @@ -12,9 +13,9 @@ import { Section, TextArea, } from '../components'; -import { StatusDisplayControls } from './common/StatusDisplayControls'; import { Window } from '../layouts'; import { sanitizeText } from '../sanitize'; +import { StatusDisplayControls } from './common/StatusDisplayControls'; const STATE_BUYING_SHUTTLE = 'buying_shuttle'; const STATE_CHANGING_STATUS = 'changing_status'; diff --git a/tgui/packages/tgui/interfaces/ComponentPrinter.tsx b/tgui/packages/tgui/interfaces/ComponentPrinter.tsx index b5e93fe2b2c..7c8f16a8c53 100644 --- a/tgui/packages/tgui/interfaces/ComponentPrinter.tsx +++ b/tgui/packages/tgui/interfaces/ComponentPrinter.tsx @@ -1,13 +1,14 @@ -import { useBackend } from '../backend'; -import { Material } from './Fabrication/Types'; -import { Window } from '../layouts'; -import { Box, Tooltip, Icon, Stack, Section } from '../components'; -import { Design } from './Fabrication/Types'; -import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; -import { MaterialMap } from './Fabrication/Types'; import { classes } from 'common/react'; + +import { useBackend } from '../backend'; +import { Box, Icon, Section, Stack, Tooltip } from '../components'; +import { Window } from '../layouts'; import { DesignBrowser } from './Fabrication/DesignBrowser'; import { MaterialAccessBar } from './Fabrication/MaterialAccessBar'; +import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; +import { Material } from './Fabrication/Types'; +import { Design } from './Fabrication/Types'; +import { MaterialMap } from './Fabrication/Types'; type ComponentPrinterData = { designs: Record; diff --git a/tgui/packages/tgui/interfaces/Crayon.tsx b/tgui/packages/tgui/interfaces/Crayon.tsx index 3c64d2d45a7..27a36f745cd 100644 --- a/tgui/packages/tgui/interfaces/Crayon.tsx +++ b/tgui/packages/tgui/interfaces/Crayon.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CrewConsole.jsx b/tgui/packages/tgui/interfaces/CrewConsole.jsx index a7ae6d530b0..7796a56809c 100644 --- a/tgui/packages/tgui/interfaces/CrewConsole.jsx +++ b/tgui/packages/tgui/interfaces/CrewConsole.jsx @@ -1,6 +1,7 @@ import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; -import { Box, Button, Section, Table, Icon } from '../components'; +import { Box, Button, Icon, Section, Table } from '../components'; import { COLORS } from '../constants'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx b/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx index f977402abad..f0404682475 100644 --- a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx +++ b/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx @@ -1,7 +1,8 @@ // THIS IS A SKYRAT UI FILE import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; -import { Box, Button, Section, Table, Icon } from '../components'; +import { Box, Button, Icon, Section, Table } from '../components'; import { COLORS } from '../constants'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx b/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx index 41755b1fab1..fb27deeaeba 100644 --- a/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx +++ b/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx @@ -1,7 +1,8 @@ // THIS IS A SKYRAT UI FILE import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; -import { Box, Button, Section, Table, Icon } from '../components'; +import { Box, Button, Icon, Section, Table } from '../components'; import { COLORS } from '../constants'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CrewManifest.jsx b/tgui/packages/tgui/interfaces/CrewManifest.jsx index f84b79141a8..73d67bf5158 100644 --- a/tgui/packages/tgui/interfaces/CrewManifest.jsx +++ b/tgui/packages/tgui/interfaces/CrewManifest.jsx @@ -1,4 +1,5 @@ import { classes } from 'common/react'; + import { useBackend } from '../backend'; import { Icon, Section, Table, Tooltip } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/CrossingSignal.tsx b/tgui/packages/tgui/interfaces/CrossingSignal.tsx index c13b0c1c3d3..e0585318649 100644 --- a/tgui/packages/tgui/interfaces/CrossingSignal.tsx +++ b/tgui/packages/tgui/interfaces/CrossingSignal.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Section, LabeledList } from '../components'; +import { LabeledList, Section } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/Cryo.jsx b/tgui/packages/tgui/interfaces/Cryo.jsx index b2c5054e0f5..de547e93fba 100644 --- a/tgui/packages/tgui/interfaces/Cryo.jsx +++ b/tgui/packages/tgui/interfaces/Cryo.jsx @@ -6,8 +6,8 @@ import { ProgressBar, Section, } from '../components'; -import { BeakerContents } from './common/BeakerContents'; import { Window } from '../layouts'; +import { BeakerContents } from './common/BeakerContents'; const damageTypes = [ { diff --git a/tgui/packages/tgui/interfaces/Crystallizer.tsx b/tgui/packages/tgui/interfaces/Crystallizer.tsx index c68799fc6e3..f306f5e03e0 100644 --- a/tgui/packages/tgui/interfaces/Crystallizer.tsx +++ b/tgui/packages/tgui/interfaces/Crystallizer.tsx @@ -1,3 +1,7 @@ +import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; import { Box, Button, @@ -6,12 +10,8 @@ import { ProgressBar, Section, } from '../components'; - -import { BooleanLike } from 'common/react'; -import { Window } from '../layouts'; import { getGasColor } from '../constants'; -import { toFixed } from 'common/math'; -import { useBackend } from '../backend'; +import { Window } from '../layouts'; type Data = { on: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx b/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx index fdb4970e1e6..1daed59197a 100644 --- a/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx +++ b/tgui/packages/tgui/interfaces/CyborgBootDebug.jsx @@ -1,4 +1,5 @@ import { multiline } from 'common/string'; + import { useBackend } from '../backend'; import { Button, Input, LabeledList, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/DelamProcedure.tsx b/tgui/packages/tgui/interfaces/DelamProcedure.tsx index 9729867036a..1dfe78947f3 100644 --- a/tgui/packages/tgui/interfaces/DelamProcedure.tsx +++ b/tgui/packages/tgui/interfaces/DelamProcedure.tsx @@ -1,5 +1,5 @@ // THIS IS A SKYRAT UI FILE -import { Section, BlockQuote, Box, NoticeBox } from '../components'; +import { BlockQuote, Box, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; export const DelamProcedure = () => { diff --git a/tgui/packages/tgui/interfaces/DepartmentOrders.tsx b/tgui/packages/tgui/interfaces/DepartmentOrders.tsx index 8823018a14c..5fb8853cdb8 100644 --- a/tgui/packages/tgui/interfaces/DepartmentOrders.tsx +++ b/tgui/packages/tgui/interfaces/DepartmentOrders.tsx @@ -1,5 +1,6 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/DestinationTagger.tsx b/tgui/packages/tgui/interfaces/DestinationTagger.tsx index 04ae61aec01..b1acfe192a7 100644 --- a/tgui/packages/tgui/interfaces/DestinationTagger.tsx +++ b/tgui/packages/tgui/interfaces/DestinationTagger.tsx @@ -1,8 +1,9 @@ -import { flow } from 'common/fp'; import { map, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; + import { useBackend } from '../backend'; +import { Button, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { Stack, Section, Button } from '../components'; type DestinationTaggerData = { locations: string[]; diff --git a/tgui/packages/tgui/interfaces/DestructiveAnalyzer.tsx b/tgui/packages/tgui/interfaces/DestructiveAnalyzer.tsx index 20af79ae1b9..87aa138bde9 100644 --- a/tgui/packages/tgui/interfaces/DestructiveAnalyzer.tsx +++ b/tgui/packages/tgui/interfaces/DestructiveAnalyzer.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Button, Box, Section, NoticeBox, Image } from '../components'; +import { Box, Button, Image, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx index 38baaab8af1..244add6939e 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx @@ -11,8 +11,8 @@ import { Section, Stack, } from '../../components'; -import { GeneticMakeupInfo } from './GeneticMakeupInfo'; import { PULSE_DURATION_MAX, PULSE_STRENGTH_MAX } from './constants'; +import { GeneticMakeupInfo } from './GeneticMakeupInfo'; const GeneticMakeupBufferInfo = (props) => { const { index, makeup } = props; diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx index ce60a256f7f..d307b0e9d37 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleSequencer.jsx @@ -1,8 +1,8 @@ import { classes } from 'common/react'; + import { resolveAsset } from '../../assets'; import { useBackend } from '../../backend'; -import { Box, Button, Section, Stack, Image } from '../../components'; -import { MutationInfo } from './MutationInfo'; +import { Box, Button, Image, Section, Stack } from '../../components'; import { CLEAR_GENE, GENE_COLORS, @@ -12,6 +12,7 @@ import { SUBJECT_DEAD, SUBJECT_TRANSFORMING, } from './constants'; +import { MutationInfo } from './MutationInfo'; const GenomeImage = (props) => { const { url, selected, onClick } = props; diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx index ba43c56cf3c..43c22b321a0 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleStorage.jsx @@ -1,16 +1,15 @@ import { uniqBy } from 'common/collections'; + import { useBackend } from '../../backend'; import { Box, Button, Collapsible, - Stack, LabeledList, Section, + Stack, Tabs, } from '../../components'; -import { GeneticMakeupInfo } from './GeneticMakeupInfo'; -import { MutationInfo } from './MutationInfo'; import { STORAGE_CONS_SUBMODE_CHROMOSOMES, STORAGE_CONS_SUBMODE_MUTATIONS, @@ -20,6 +19,8 @@ import { STORAGE_MODE_CONSOLE, STORAGE_MODE_DISK, } from './constants'; +import { GeneticMakeupInfo } from './GeneticMakeupInfo'; +import { MutationInfo } from './MutationInfo'; export const DnaConsoleStorage = (props) => { const { data, act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx b/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx index d3b1b9156de..89a1468d953 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/MutationInfo.jsx @@ -1,5 +1,6 @@ import { filter, uniqBy } from 'common/collections'; import { flow } from 'common/fp'; + import { useBackend } from '../../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/DnaConsole/index.jsx b/tgui/packages/tgui/interfaces/DnaConsole/index.jsx index 786788b41ff..036155e5393 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/index.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/index.jsx @@ -9,10 +9,6 @@ import { Stack, } from '../../components'; import { Window } from '../../layouts'; -import { DnaConsoleEnzymes } from './DnaConsoleEnzymes'; -import { DnaConsoleSequencer } from './DnaConsoleSequencer'; -import { DnaConsoleStorage } from './DnaConsoleStorage'; -import { DnaScanner } from './DnaScanner'; import { CONSOLE_MODE_ENZYMES, CONSOLE_MODE_FEATURES, @@ -20,6 +16,10 @@ import { CONSOLE_MODE_STORAGE, STORAGE_MODE_CONSOLE, } from './constants'; +import { DnaConsoleEnzymes } from './DnaConsoleEnzymes'; +import { DnaConsoleSequencer } from './DnaConsoleSequencer'; +import { DnaConsoleStorage } from './DnaConsoleStorage'; +import { DnaScanner } from './DnaScanner'; export const DnaConsole = (props) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/EightBallVote.tsx b/tgui/packages/tgui/interfaces/EightBallVote.tsx index 499edaa7493..30ab7baae48 100644 --- a/tgui/packages/tgui/interfaces/EightBallVote.tsx +++ b/tgui/packages/tgui/interfaces/EightBallVote.tsx @@ -1,8 +1,9 @@ -import { useBackend } from '../backend'; -import { Box, Button, Grid, Section, NoticeBox } from '../components'; -import { toTitleCase } from 'common/string'; -import { Window } from '../layouts'; import { BooleanLike } from 'common/react'; +import { toTitleCase } from 'common/string'; + +import { useBackend } from '../backend'; +import { Box, Button, Grid, NoticeBox, Section } from '../components'; +import { Window } from '../layouts'; type Data = { shaking: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/Electrolyzer.tsx b/tgui/packages/tgui/interfaces/Electrolyzer.tsx index 76fc5c829b3..ab912e2ec4a 100644 --- a/tgui/packages/tgui/interfaces/Electrolyzer.tsx +++ b/tgui/packages/tgui/interfaces/Electrolyzer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Electropack.jsx b/tgui/packages/tgui/interfaces/Electropack.jsx index 3eb52ab8946..4b0a14e8b02 100644 --- a/tgui/packages/tgui/interfaces/Electropack.jsx +++ b/tgui/packages/tgui/interfaces/Electropack.jsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Button, LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ElevatorPanel.tsx b/tgui/packages/tgui/interfaces/ElevatorPanel.tsx index 37fb4f99ec9..bb1998df4b6 100644 --- a/tgui/packages/tgui/interfaces/ElevatorPanel.tsx +++ b/tgui/packages/tgui/interfaces/ElevatorPanel.tsx @@ -1,9 +1,10 @@ import { clamp } from 'common/math'; import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { - Box, Blink, + Box, Button, Dimmer, Icon, diff --git a/tgui/packages/tgui/interfaces/EmotePanel.tsx b/tgui/packages/tgui/interfaces/EmotePanel.tsx index 622fa86c3bc..7d276024ac3 100644 --- a/tgui/packages/tgui/interfaces/EmotePanel.tsx +++ b/tgui/packages/tgui/interfaces/EmotePanel.tsx @@ -1,9 +1,9 @@ -import { useBackend, useLocalState } from '../backend'; -import { Window } from '../layouts'; -import { Button, Section, Flex, Icon, Box } from '../components'; import { BooleanLike } from '../../common/react'; -import { SearchBar } from './Fabrication/SearchBar'; import { capitalizeFirst } from '../../common/string'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Flex, Icon, Section } from '../components'; +import { Window } from '../layouts'; +import { SearchBar } from './Fabrication/SearchBar'; type Emote = { key: string; diff --git a/tgui/packages/tgui/interfaces/EngravedMessage.jsx b/tgui/packages/tgui/interfaces/EngravedMessage.jsx index d66f33b086b..91a2b3b458f 100644 --- a/tgui/packages/tgui/interfaces/EngravedMessage.jsx +++ b/tgui/packages/tgui/interfaces/EngravedMessage.jsx @@ -1,4 +1,5 @@ import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/EventPanel.jsx b/tgui/packages/tgui/interfaces/EventPanel.jsx index e2bdfbd8383..41736971165 100644 --- a/tgui/packages/tgui/interfaces/EventPanel.jsx +++ b/tgui/packages/tgui/interfaces/EventPanel.jsx @@ -1,7 +1,8 @@ // THIS IS A SKYRAT UI FILE -import { useBackend } from '../backend'; -import { Section, Button, NoticeBox, LabeledList, Stack } from '../components'; import { toFixed } from 'common/math'; + +import { useBackend } from '../backend'; +import { Button, LabeledList, NoticeBox, Section, Stack } from '../components'; import { Window } from '../layouts'; export const EventPanel = (props) => { diff --git a/tgui/packages/tgui/interfaces/ExaminePanel.jsx b/tgui/packages/tgui/interfaces/ExaminePanel.jsx index 4feb759b402..7b2bbf91ce2 100644 --- a/tgui/packages/tgui/interfaces/ExaminePanel.jsx +++ b/tgui/packages/tgui/interfaces/ExaminePanel.jsx @@ -1,8 +1,8 @@ // THIS IS A SKYRAT UI FILE -import { useBackend } from '../backend'; -import { Stack, Section, ByondUi } from '../components'; -import { Window } from '../layouts'; import { resolveAsset } from '../assets'; +import { useBackend } from '../backend'; +import { ByondUi, Section, Stack } from '../components'; +import { Window } from '../layouts'; const formatURLs = (text) => { if (!text) return; diff --git a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx index 7077cc93ada..ac023076c2b 100644 --- a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx +++ b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx @@ -1,3 +1,8 @@ +import { capitalize } from 'common/string'; +import { Fragment } from 'react'; + +import { resolveAsset } from '../assets'; +import nt_logo from '../assets/bg-nanotrasen.svg'; import { useBackend, useLocalState } from '../backend'; import { BlockQuote, @@ -12,12 +17,8 @@ import { Section, Stack, } from '../components'; -import { Window } from '../layouts'; -import { resolveAsset } from '../assets'; import { formatTime } from '../format'; -import { capitalize } from 'common/string'; -import nt_logo from '../assets/bg-nanotrasen.svg'; -import { Fragment } from 'react'; +import { Window } from '../layouts'; type ExplorationEventData = { name: string; diff --git a/tgui/packages/tgui/interfaces/ExoscannerConsole.tsx b/tgui/packages/tgui/interfaces/ExoscannerConsole.tsx index eb19618866c..4b97f52732f 100644 --- a/tgui/packages/tgui/interfaces/ExoscannerConsole.tsx +++ b/tgui/packages/tgui/interfaces/ExoscannerConsole.tsx @@ -4,14 +4,14 @@ import { Box, Button, Icon, - Modal, - Section, LabeledList, + Modal, NoticeBox, + Section, Stack, } from '../components'; -import { Window } from '../layouts'; import { formatTime } from '../format'; +import { Window } from '../layouts'; type SiteData = { name: string; diff --git a/tgui/packages/tgui/interfaces/ExosuitControlConsole.jsx b/tgui/packages/tgui/interfaces/ExosuitControlConsole.jsx index 2fe72ef4a4c..1987005cfca 100644 --- a/tgui/packages/tgui/interfaces/ExosuitControlConsole.jsx +++ b/tgui/packages/tgui/interfaces/ExosuitControlConsole.jsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { AnimatedNumber, diff --git a/tgui/packages/tgui/interfaces/ExosuitFabricator.tsx b/tgui/packages/tgui/interfaces/ExosuitFabricator.tsx index f9a104d8b64..07c0daabe32 100644 --- a/tgui/packages/tgui/interfaces/ExosuitFabricator.tsx +++ b/tgui/packages/tgui/interfaces/ExosuitFabricator.tsx @@ -1,13 +1,14 @@ -import { useBackend } from '../backend'; -import { Box, Button, Section, Stack, Icon } from '../components'; -import { Window } from '../layouts'; -import { MaterialAccessBar } from './Fabrication/MaterialAccessBar'; -import { Design, FabricatorData, MaterialMap } from './Fabrication/Types'; -import { DesignBrowser } from './Fabrication/DesignBrowser'; -import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; -import { Tooltip } from '../components'; import { BooleanLike, classes } from 'common/react'; +import { useBackend } from '../backend'; +import { Box, Button, Icon, Section, Stack } from '../components'; +import { Tooltip } from '../components'; +import { Window } from '../layouts'; +import { DesignBrowser } from './Fabrication/DesignBrowser'; +import { MaterialAccessBar } from './Fabrication/MaterialAccessBar'; +import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; +import { Design, FabricatorData, MaterialMap } from './Fabrication/Types'; + type ExosuitFabricatorData = FabricatorData & { processing: BooleanLike; }; diff --git a/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx b/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx index d2ff5abe7d4..0c632afd283 100644 --- a/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx +++ b/tgui/packages/tgui/interfaces/ExperimentConfigure.jsx @@ -1,16 +1,17 @@ -import { Window } from '../layouts'; +import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; import { - Section, Box, Button, Flex, Icon, LabeledList, + Section, Table, Tooltip, } from '../components'; -import { sortBy } from 'common/collections'; +import { Window } from '../layouts'; const ExperimentStages = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx index 3f63de4144d..6a76a47c7df 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx @@ -1,10 +1,11 @@ import { sortBy } from 'common/collections'; import { classes } from 'common/react'; import { ReactNode } from 'react'; -import { Stack, Section, Icon, Dimmer } from '../../components'; -import { Design, MaterialMap } from './Types'; -import { SearchBar } from './SearchBar'; + import { useSharedState } from '../../backend'; +import { Dimmer, Icon, Section, Stack } from '../../components'; +import { SearchBar } from './SearchBar'; +import { Design, MaterialMap } from './Types'; /** * A function that does nothing. diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx index 6b1c7f6b611..6e7b20058c7 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx @@ -1,7 +1,8 @@ import { sortBy } from 'common/collections'; import { classes } from 'common/react'; + import { useLocalState } from '../../backend'; -import { Flex, Button, Stack, AnimatedNumber } from '../../components'; +import { AnimatedNumber, Button, Flex, Stack } from '../../components'; import { formatSiUnit } from '../../format'; import { MaterialIcon } from './MaterialIcon'; import { Material } from './Types'; diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialCostSequence.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialCostSequence.tsx index 8b53bbc5a55..c419d6597d3 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/MaterialCostSequence.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialCostSequence.tsx @@ -1,7 +1,7 @@ import { Flex } from '../../components'; -import { Design, MaterialMap } from './Types'; -import { MaterialIcon } from './MaterialIcon'; import { formatSiUnit } from '../../format'; +import { MaterialIcon } from './MaterialIcon'; +import { Design, MaterialMap } from './Types'; export type MaterialCostSequenceProps = { /** diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx index 5a7af53a768..4e322379ca3 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialIcon.tsx @@ -1,4 +1,5 @@ import { classes } from 'common/react'; + import { Icon } from '../../components'; const MATERIAL_ICONS: Record = { diff --git a/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx b/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx index 8b000bb6fa6..27b697a9678 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx @@ -1,5 +1,6 @@ import { Component } from 'react'; -import { Stack, Input, Icon } from '../../components'; + +import { Icon, Input, Stack } from '../../components'; /** * The properties of a search bar. diff --git a/tgui/packages/tgui/interfaces/Fabricator.tsx b/tgui/packages/tgui/interfaces/Fabricator.tsx index 494a647a030..04c504028a4 100644 --- a/tgui/packages/tgui/interfaces/Fabricator.tsx +++ b/tgui/packages/tgui/interfaces/Fabricator.tsx @@ -1,19 +1,20 @@ +import { classes } from 'common/react'; + import { useBackend } from '../backend'; import { - Stack, - Section, - Icon, - Dimmer, Box, - Tooltip, Button, + Dimmer, + Icon, + Section, + Stack, + Tooltip, } from '../components'; import { Window } from '../layouts'; -import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; -import { MaterialAccessBar } from './Fabrication/MaterialAccessBar'; -import { FabricatorData, Design, MaterialMap } from './Fabrication/Types'; -import { classes } from 'common/react'; import { DesignBrowser } from './Fabrication/DesignBrowser'; +import { MaterialAccessBar } from './Fabrication/MaterialAccessBar'; +import { MaterialCostSequence } from './Fabrication/MaterialCostSequence'; +import { Design, FabricatorData, MaterialMap } from './Fabrication/Types'; export const Fabricator = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Filteriffic.jsx b/tgui/packages/tgui/interfaces/Filteriffic.jsx index dc9984648ca..c35b9035acb 100644 --- a/tgui/packages/tgui/interfaces/Filteriffic.jsx +++ b/tgui/packages/tgui/interfaces/Filteriffic.jsx @@ -1,5 +1,7 @@ import { map } from 'common/collections'; import { toFixed } from 'common/math'; +import { useState } from 'react'; + import { numberOfDecimalDigits } from '../../common/math'; import { useBackend } from '../backend'; import { @@ -15,7 +17,6 @@ import { Section, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; const FilterIntegerEntry = (props) => { const { value, name, filterName } = props; diff --git a/tgui/packages/tgui/interfaces/FishCatalog.tsx b/tgui/packages/tgui/interfaces/FishCatalog.tsx index f2a15989a12..2a3db324b3c 100644 --- a/tgui/packages/tgui/interfaces/FishCatalog.tsx +++ b/tgui/packages/tgui/interfaces/FishCatalog.tsx @@ -1,10 +1,11 @@ import { sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { classes } from 'common/react'; +import { capitalize } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Box, Button, LabeledList, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { capitalize } from 'common/string'; type FishingTips = { spots: string; diff --git a/tgui/packages/tgui/interfaces/FishingCalculator.tsx b/tgui/packages/tgui/interfaces/FishingCalculator.tsx index 7fed54df749..cf9f90a0755 100644 --- a/tgui/packages/tgui/interfaces/FishingCalculator.tsx +++ b/tgui/packages/tgui/interfaces/FishingCalculator.tsx @@ -1,4 +1,5 @@ import { round } from 'common/math'; + import { useBackend, useLocalState } from '../backend'; import { Button, Dropdown, Input, Stack, Table } from '../components'; import { TableCell, TableRow } from '../components/Table'; diff --git a/tgui/packages/tgui/interfaces/FishingRod.tsx b/tgui/packages/tgui/interfaces/FishingRod.tsx index 37d228f9851..a17108cd030 100644 --- a/tgui/packages/tgui/interfaces/FishingRod.tsx +++ b/tgui/packages/tgui/interfaces/FishingRod.tsx @@ -1,6 +1,6 @@ import { useBackend } from '../backend'; +import { Box, Button, Flex, Image, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { Box, Stack, Button, Section, Flex, Image } from '../components'; type Data = { bait_name: string; diff --git a/tgui/packages/tgui/interfaces/ForceEvent.tsx b/tgui/packages/tgui/interfaces/ForceEvent.tsx index 9af8f337d84..cd91214247c 100644 --- a/tgui/packages/tgui/interfaces/ForceEvent.tsx +++ b/tgui/packages/tgui/interfaces/ForceEvent.tsx @@ -1,7 +1,8 @@ import { paginate } from 'common/collections'; import { BooleanLike } from 'common/react'; + import { useBackend, useLocalState } from '../backend'; -import { Stack, Button, Icon, Input, Section, Tabs } from '../components'; +import { Button, Icon, Input, Section, Stack, Tabs } from '../components'; import { Window } from '../layouts'; const CATEGORY_PAGE_ITEMS = 4; diff --git a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx b/tgui/packages/tgui/interfaces/GasAnalyzer.tsx index 6b37e6b7d4d..d92197887eb 100644 --- a/tgui/packages/tgui/interfaces/GasAnalyzer.tsx +++ b/tgui/packages/tgui/interfaces/GasAnalyzer.tsx @@ -1,12 +1,12 @@ import { useBackend } from '../backend'; -import { GasmixParser } from './common/GasmixParser'; -import type { Gasmix } from './common/GasmixParser'; +import { Section } from '../components'; +import { Window } from '../layouts'; import { AtmosHandbookContent, atmosHandbookHooks, } from './common/AtmosHandbook'; -import { Window } from '../layouts'; -import { Section } from '../components'; +import type { Gasmix } from './common/GasmixParser'; +import { GasmixParser } from './common/GasmixParser'; export type GasAnalyzerData = { gasmixes: Gasmix[]; diff --git a/tgui/packages/tgui/interfaces/GlassBlowing.tsx b/tgui/packages/tgui/interfaces/GlassBlowing.tsx index f2c905520ab..7c0e5bd5652 100644 --- a/tgui/packages/tgui/interfaces/GlassBlowing.tsx +++ b/tgui/packages/tgui/interfaces/GlassBlowing.tsx @@ -1,17 +1,18 @@ // THIS IS A SKYRAT UI FILE +import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; import { + AnimatedNumber, Box, Button, Flex, - Stack, - Section, ProgressBar, - AnimatedNumber, + Section, + Stack, Table, } from '../components'; -import { toFixed } from 'common/math'; -import { BooleanLike } from 'common/react'; -import { useBackend } from '../backend'; import { Window } from '../layouts'; type GlassData = { diff --git a/tgui/packages/tgui/interfaces/Gps.jsx b/tgui/packages/tgui/interfaces/Gps.jsx index 5695fa9217e..662335fcdc3 100644 --- a/tgui/packages/tgui/interfaces/Gps.jsx +++ b/tgui/packages/tgui/interfaces/Gps.jsx @@ -2,6 +2,7 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { clamp } from 'common/math'; import { vecLength, vecSubtract } from 'common/vector'; + import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx index 25489b28b44..5a988907524 100644 --- a/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx +++ b/tgui/packages/tgui/interfaces/GreyscaleModifyMenu.tsx @@ -3,15 +3,15 @@ import { Box, Button, ColorBox, + Divider, Flex, - Stack, Icon, + Image, Input, LabeledList, Section, + Stack, Table, - Divider, - Image, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/GulagItemReclaimer.tsx b/tgui/packages/tgui/interfaces/GulagItemReclaimer.tsx index 8698a0207ed..48b01dfd885 100644 --- a/tgui/packages/tgui/interfaces/GulagItemReclaimer.tsx +++ b/tgui/packages/tgui/interfaces/GulagItemReclaimer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, NoticeBox, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx index bb65a0bb765..0b067da38a7 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; +import { useBackend } from 'tgui/backend'; import { Box, Button, @@ -9,11 +11,9 @@ import { Section, Tooltip, } from 'tgui/components'; -import { HelpDummy, HoverHelp } from './helpers'; -import { BooleanLike } from 'common/react'; import { HypertorusFilter } from '.'; -import { useBackend } from 'tgui/backend'; +import { HelpDummy, HoverHelp } from './helpers'; type ComboProps = { color?: string | BooleanLike; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx index 2497b75f9f9..3e369cbe17d 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx @@ -1,3 +1,7 @@ +import { filter, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; +import { toFixed } from 'common/math'; +import { useBackend } from 'tgui/backend'; import { Box, Button, @@ -6,14 +10,10 @@ import { ProgressBar, Section, } from 'tgui/components'; -import { HelpDummy, HoverHelp } from './helpers'; -import { HypertorusFuel, HypertorusGas } from '.'; -import { filter, sortBy } from 'common/collections'; import { getGasColor, getGasLabel } from 'tgui/constants'; -import { flow } from 'common/fp'; -import { toFixed } from 'common/math'; -import { useBackend } from 'tgui/backend'; +import { HypertorusFuel, HypertorusGas } from '.'; +import { HelpDummy, HoverHelp } from './helpers'; type GasListProps = { input_max: number; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Parameters.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Parameters.tsx index b16e6e0b98c..adf219860fa 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Parameters.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Parameters.tsx @@ -1,8 +1,7 @@ -import { Flex, LabeledControls, RoundGauge, Section } from 'tgui/components'; - -import { formatSiUnit } from 'tgui/format'; import { toFixed } from 'common/math'; import { useBackend } from 'tgui/backend'; +import { Flex, LabeledControls, RoundGauge, Section } from 'tgui/components'; +import { formatSiUnit } from 'tgui/format'; type Data = { apc_energy: number; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Recipes.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Recipes.tsx index 352c621665c..eb573184fa7 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Recipes.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Recipes.tsx @@ -1,8 +1,8 @@ +import { useBackend } from 'tgui/backend'; import { Box, Button, Icon, Table, Tooltip } from 'tgui/components'; import { getGasColor, getGasLabel } from 'tgui/constants'; import { HypertorusData } from '.'; -import { useBackend } from 'tgui/backend'; type Recipe = { param: string; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Temperatures.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Temperatures.tsx index 69fb95a3fed..e6dd7ca679f 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Temperatures.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Temperatures.tsx @@ -1,8 +1,8 @@ -import { Box, Flex, Icon, Section, Stack, Tooltip } from 'tgui/components'; -import { HypertorusFuel } from '.'; - -import { to_exponential_if_big } from './helpers'; import { useBackend } from 'tgui/backend'; +import { Box, Flex, Icon, Section, Stack, Tooltip } from 'tgui/components'; + +import { HypertorusFuel } from '.'; +import { to_exponential_if_big } from './helpers'; type Data = { base_max_temperature: number; diff --git a/tgui/packages/tgui/interfaces/Hypertorus/index.tsx b/tgui/packages/tgui/interfaces/Hypertorus/index.tsx index 9496b1d5e1e..247614e6ceb 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/index.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/index.tsx @@ -1,13 +1,13 @@ -import { Button, Collapsible, Flex, Section, Stack } from 'tgui/components'; -import { HypertorusSecondaryControls, HypertorusWasteRemove } from './Controls'; - import { BooleanLike } from 'common/react'; +import { useBackend } from 'tgui/backend'; +import { Button, Collapsible, Flex, Section, Stack } from 'tgui/components'; +import { Window } from 'tgui/layouts'; + +import { HypertorusSecondaryControls, HypertorusWasteRemove } from './Controls'; import { HypertorusGases } from './Gases'; import { HypertorusParameters } from './Parameters'; import { HypertorusRecipes } from './Recipes'; import { HypertorusTemperatures } from './Temperatures'; -import { Window } from 'tgui/layouts'; -import { useBackend } from 'tgui/backend'; export type HypertorusData = { start_power: number; diff --git a/tgui/packages/tgui/interfaces/IVDrip.tsx b/tgui/packages/tgui/interfaces/IVDrip.tsx index 3b81dbf9f4e..4254f53fa54 100644 --- a/tgui/packages/tgui/interfaces/IVDrip.tsx +++ b/tgui/packages/tgui/interfaces/IVDrip.tsx @@ -1,14 +1,15 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { - Tooltip, Box, - Slider, - ProgressBar, - NoticeBox, Button, LabeledList, + NoticeBox, + ProgressBar, Section, + Slider, + Tooltip, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/InfraredEmitter.tsx b/tgui/packages/tgui/interfaces/InfraredEmitter.tsx index 9c6fe81811e..24aad262f89 100644 --- a/tgui/packages/tgui/interfaces/InfraredEmitter.tsx +++ b/tgui/packages/tgui/interfaces/InfraredEmitter.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Button, Section, LabeledList } from '../components'; +import { Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/InfuserBook.tsx b/tgui/packages/tgui/interfaces/InfuserBook.tsx index 5efab75e14f..dba6626cf64 100644 --- a/tgui/packages/tgui/interfaces/InfuserBook.tsx +++ b/tgui/packages/tgui/interfaces/InfuserBook.tsx @@ -1,8 +1,9 @@ +import { paginate, range } from 'common/collections'; +import { multiline } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { BlockQuote, Box, Button, Section, Stack, Tabs } from '../components'; import { Window } from '../layouts'; -import { multiline } from 'common/string'; -import { paginate, range } from 'common/collections'; type Entry = { name: string; diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/BasicInput.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/BasicInput.jsx index 74cc9a2157f..a4e898c3a34 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/BasicInput.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/BasicInput.jsx @@ -1,4 +1,4 @@ -import { Stack, Button } from '../../components'; +import { Button, Stack } from '../../components'; export const BasicInput = (props) => { const { children, name, setValue, defaultValue, value } = props; diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/CircuitInfo.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/CircuitInfo.jsx index 7e932c0eb9e..607e22d920e 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/CircuitInfo.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/CircuitInfo.jsx @@ -1,4 +1,4 @@ -import { Button, Stack, Box } from '../../components'; +import { Box, Button, Stack } from '../../components'; export const CircuitInfo = (props) => { const { name, desc, notices, ...rest } = props; diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx index cb17d3bb749..9b91ef348fa 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/ComponentMenu.jsx @@ -1,17 +1,18 @@ +import { shallowDiffers } from 'common/react'; +import { Component } from 'react'; + +import { resolveAsset } from '../../assets'; import { - Section, Button, Dropdown, - Stack, Input, NoticeBox, + Section, + Stack, } from '../../components'; -import { Component } from 'react'; -import { shallowDiffers } from 'common/react'; import { fetchRetry } from '../../http'; -import { resolveAsset } from '../../assets'; -import { DisplayComponent } from './DisplayComponent'; import { DEFAULT_COMPONENT_MENU_LIMIT } from './constants'; +import { DisplayComponent } from './DisplayComponent'; // Cache response so it's only sent once let fetchServerData; diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx index 2338b71c540..63f5c5b7f54 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx @@ -1,7 +1,8 @@ -import { Button, Stack, Box } from '../../components'; import { Component, createRef } from 'react'; -import { Port } from './Port'; + +import { Box, Button, Stack } from '../../components'; import { noop } from './constants'; +import { Port } from './Port'; export class DisplayComponent extends Component { constructor(props) { diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayName.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayName.jsx index 41ca890c6d3..7ac36a9ab37 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayName.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayName.jsx @@ -1,7 +1,7 @@ import { Box, Button, Flex } from '../../components'; import { - FUNDAMENTAL_DATA_TYPES, DATATYPE_DISPLAY_HANDLERS, + FUNDAMENTAL_DATA_TYPES, } from './FundamentalTypes'; export const DisplayName = (props) => { diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/FundamentalTypes.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/FundamentalTypes.jsx index 554796e3311..d27c79df9d1 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/FundamentalTypes.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/FundamentalTypes.jsx @@ -1,5 +1,5 @@ +import { Button, Dropdown, Input, NumberInput, Stack } from '../../components'; import { BasicInput } from './BasicInput'; -import { NumberInput, Button, Stack, Input, Dropdown } from '../../components'; import { OPTION_DROPDOWN_LARGE_CHAR_AMOUNT } from './constants'; export const FUNDAMENTAL_DATA_TYPES = { diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx index 804bec3641a..d51c39714ef 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/ObjectComponent.jsx @@ -1,6 +1,7 @@ -import { Box, Stack, Button } from '../../components'; import { Component } from 'react'; + import { shallowDiffers } from '../../../common/react'; +import { Box, Button, Stack } from '../../components'; import { ABSOLUTE_Y_OFFSET, noop } from './constants'; import { Port } from './Port'; diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx index 780e8414f92..1034602a523 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/Port.jsx @@ -1,8 +1,9 @@ -import { Stack, Box } from '../../components'; -import { Component, createRef } from 'react'; -import { DisplayName } from './DisplayName'; import { classes } from 'common/react'; +import { Component, createRef } from 'react'; + +import { Box, Stack } from '../../components'; import { noop } from './constants'; +import { DisplayName } from './DisplayName'; export class Port extends Component { constructor(props) { diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx index 8f0993e487a..1262bdc2868 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx @@ -1,14 +1,15 @@ +import { shallowDiffers } from 'common/react'; +import { Component } from 'react'; + import { Box, - Stack, - Section, Button, - Input, Dropdown, Icon, + Input, + Section, + Stack, } from '../../components'; -import { Component } from 'react'; -import { shallowDiffers } from 'common/react'; import { VARIABLE_ASSOC_LIST, VARIABLE_LIST, diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/index.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/index.jsx index 5174f1525c2..79e4df4109f 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/index.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/index.jsx @@ -1,9 +1,12 @@ -import { useBackend } from '../../backend'; -import { Input, InfinitePlane, Stack, Box, Button } from '../../components'; import { Component } from 'react'; -import { Window } from '../../layouts'; + import { resolveAsset } from '../../assets'; +import { useBackend } from '../../backend'; +import { Box, Button, InfinitePlane, Input, Stack } from '../../components'; +import { Window } from '../../layouts'; +import { Connections } from '../common/Connections'; import { CircuitInfo } from './CircuitInfo'; +import { ComponentMenu } from './ComponentMenu'; import { ABSOLUTE_Y_OFFSET, MOUSE_BUTTON_LEFT, @@ -11,11 +14,9 @@ import { VARIABLE_ASSOC_LIST, VARIABLE_LIST, } from './constants'; -import { Connections } from '../common/Connections'; -import { ObjectComponent } from './ObjectComponent'; import { DisplayComponent } from './DisplayComponent'; +import { ObjectComponent } from './ObjectComponent'; import { VariableMenu } from './VariableMenu'; -import { ComponentMenu } from './ComponentMenu'; export class IntegratedCircuit extends Component { constructor(props) { diff --git a/tgui/packages/tgui/interfaces/IntensityCredits.tsx b/tgui/packages/tgui/interfaces/IntensityCredits.tsx index 3bd67b2c665..efaa8307bb4 100644 --- a/tgui/packages/tgui/interfaces/IntensityCredits.tsx +++ b/tgui/packages/tgui/interfaces/IntensityCredits.tsx @@ -1,6 +1,6 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; -import { Section, NoticeBox, Flex } from '../components'; +import { Flex, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; type ICESData = { diff --git a/tgui/packages/tgui/interfaces/InteractionMenu.tsx b/tgui/packages/tgui/interfaces/InteractionMenu.tsx index bed659ed0ab..d8f611f87f5 100644 --- a/tgui/packages/tgui/interfaces/InteractionMenu.tsx +++ b/tgui/packages/tgui/interfaces/InteractionMenu.tsx @@ -1,13 +1,13 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; import { + Box, Button, Collapsible, Icon, NoticeBox, Section, Stack, - Box, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Interview.tsx b/tgui/packages/tgui/interfaces/Interview.tsx index 78f8266f476..7d5d7f1cad9 100644 --- a/tgui/packages/tgui/interfaces/Interview.tsx +++ b/tgui/packages/tgui/interfaces/Interview.tsx @@ -1,14 +1,15 @@ +import { ReactNode, useState } from 'react'; + +import { useBackend } from '../backend'; import { - Button, - TextArea, - Section, BlockQuote, - NoticeBox, Box, + Button, + NoticeBox, + Section, + TextArea, } from '../components'; import { Window } from '../layouts'; -import { useBackend } from '../backend'; -import { ReactNode, useState } from 'react'; type Data = { connected: boolean; diff --git a/tgui/packages/tgui/interfaces/InterviewManager.jsx b/tgui/packages/tgui/interfaces/InterviewManager.jsx index 2b8e43b3f3d..0e92d662f3f 100644 --- a/tgui/packages/tgui/interfaces/InterviewManager.jsx +++ b/tgui/packages/tgui/interfaces/InterviewManager.jsx @@ -1,6 +1,6 @@ +import { useBackend } from '../backend'; import { Button, Section } from '../components'; import { Window } from '../layouts'; -import { useBackend } from '../backend'; export const InterviewManager = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/JobSelection.tsx b/tgui/packages/tgui/interfaces/JobSelection.tsx index 21d08916c7d..4dbde49add4 100644 --- a/tgui/packages/tgui/interfaces/JobSelection.tsx +++ b/tgui/packages/tgui/interfaces/JobSelection.tsx @@ -1,17 +1,18 @@ +import { deepMerge } from 'common/collections'; +import { Color } from 'common/color'; +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, - StyleableSection, Icon, - Stack, NoticeBox, + Stack, + StyleableSection, } from '../components'; import { Window } from '../layouts'; -import { Color } from 'common/color'; import { JOB2ICON } from './common/JobToIcon'; -import { deepMerge } from 'common/collections'; -import { BooleanLike } from 'common/react'; type Job = { unavailable_reason: string | null; diff --git a/tgui/packages/tgui/interfaces/Jukebox.jsx b/tgui/packages/tgui/interfaces/Jukebox.jsx index d3182e2cd33..69f9917188e 100644 --- a/tgui/packages/tgui/interfaces/Jukebox.jsx +++ b/tgui/packages/tgui/interfaces/Jukebox.jsx @@ -1,14 +1,15 @@ import { sortBy } from 'common/collections'; import { flow } from 'common/fp'; + import { useBackend } from '../backend'; import { Box, Button, Dropdown, - Section, Knob, LabeledControls, LabeledList, + Section, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx b/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx index f1857597bc9..27b3cc0e05f 100644 --- a/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx +++ b/tgui/packages/tgui/interfaces/LaborClaimConsole.jsx @@ -1,4 +1,5 @@ import { toTitleCase } from 'common/string'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/LaunchpadRemote.tsx b/tgui/packages/tgui/interfaces/LaunchpadRemote.tsx index 9eef97c986c..5e7d1ba8516 100644 --- a/tgui/packages/tgui/interfaces/LaunchpadRemote.tsx +++ b/tgui/packages/tgui/interfaces/LaunchpadRemote.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { NoticeBox } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Lawpanel.tsx b/tgui/packages/tgui/interfaces/Lawpanel.tsx index f539a44fc62..3ce64868ff8 100644 --- a/tgui/packages/tgui/interfaces/Lawpanel.tsx +++ b/tgui/packages/tgui/interfaces/Lawpanel.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, diff --git a/tgui/packages/tgui/interfaces/LibraryAdmin.tsx b/tgui/packages/tgui/interfaces/LibraryAdmin.tsx index 461f8a678b7..dca8732454c 100644 --- a/tgui/packages/tgui/interfaces/LibraryAdmin.tsx +++ b/tgui/packages/tgui/interfaces/LibraryAdmin.tsx @@ -1,6 +1,7 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { capitalize } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/LibraryConsole.jsx b/tgui/packages/tgui/interfaces/LibraryConsole.jsx index 64bffecc1ab..fbcf5666861 100644 --- a/tgui/packages/tgui/interfaces/LibraryConsole.jsx +++ b/tgui/packages/tgui/interfaces/LibraryConsole.jsx @@ -1,19 +1,20 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { classes } from 'common/react'; + import { useBackend, useLocalState } from '../backend'; import { Box, Button, Dropdown, + Flex, Input, + LabeledList, Modal, NoticeBox, NumberInput, - LabeledList, Section, Stack, - Flex, Table, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/LibraryScanner.jsx b/tgui/packages/tgui/interfaces/LibraryScanner.jsx index 35737194019..efa7156abfb 100644 --- a/tgui/packages/tgui/interfaces/LibraryScanner.jsx +++ b/tgui/packages/tgui/interfaces/LibraryScanner.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Button, Stack, NoticeBox, Section } from '../components'; +import { Button, NoticeBox, Section, Stack } from '../components'; import { Window } from '../layouts'; export const LibraryScanner = (props) => { diff --git a/tgui/packages/tgui/interfaces/LibraryVisitor.jsx b/tgui/packages/tgui/interfaces/LibraryVisitor.jsx index 1519b8b31d9..6b8edb380be 100644 --- a/tgui/packages/tgui/interfaces/LibraryVisitor.jsx +++ b/tgui/packages/tgui/interfaces/LibraryVisitor.jsx @@ -1,5 +1,6 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/LightController.tsx b/tgui/packages/tgui/interfaces/LightController.tsx index f71f2194e09..f9aacf3fcfb 100644 --- a/tgui/packages/tgui/interfaces/LightController.tsx +++ b/tgui/packages/tgui/interfaces/LightController.tsx @@ -1,6 +1,6 @@ -import { useBackend, useLocalState } from '../backend'; import { round } from '../../common/math'; import { BooleanLike, classes } from '../../common/react'; +import { useBackend, useLocalState } from '../backend'; import { Box, Button, Knob, Section, Slider, Stack, Tabs } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/LightSpawn.tsx b/tgui/packages/tgui/interfaces/LightSpawn.tsx index 184daa096c2..08efda02934 100644 --- a/tgui/packages/tgui/interfaces/LightSpawn.tsx +++ b/tgui/packages/tgui/interfaces/LightSpawn.tsx @@ -1,5 +1,5 @@ -import { useBackend, useLocalState } from '../backend'; import { classes } from '../../common/react'; +import { useBackend, useLocalState } from '../backend'; import { Box, Button, Knob, Section, Slider, Stack, Tabs } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ListInputModal.tsx b/tgui/packages/tgui/interfaces/ListInputModal.tsx index 46ed16a58c3..f3f871b65b8 100644 --- a/tgui/packages/tgui/interfaces/ListInputModal.tsx +++ b/tgui/packages/tgui/interfaces/ListInputModal.tsx @@ -1,16 +1,16 @@ -import { Loader } from './common/Loader'; -import { InputButtons } from './common/InputButtons'; -import { Button, Input, Section, Stack } from '../components'; -import { useBackend, useLocalState } from '../backend'; import { KEY_A, KEY_DOWN, - KEY_ESCAPE, KEY_ENTER, + KEY_ESCAPE, KEY_UP, KEY_Z, } from '../../common/keycodes'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Input, Section, Stack } from '../components'; import { Window } from '../layouts'; +import { InputButtons } from './common/InputButtons'; +import { Loader } from './common/Loader'; type ListInputData = { init_value: string; diff --git a/tgui/packages/tgui/interfaces/LoadoutManager.tsx b/tgui/packages/tgui/interfaces/LoadoutManager.tsx index b9617450154..7e6321a30f8 100644 --- a/tgui/packages/tgui/interfaces/LoadoutManager.tsx +++ b/tgui/packages/tgui/interfaces/LoadoutManager.tsx @@ -1,8 +1,9 @@ // THIS IS A SKYRAT UI FILE -import { useState } from 'react'; -import { useBackend } from '../backend'; -import { Box, Button, Section, Stack, Dropdown } from '../components'; import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { Box, Button, Dropdown, Section, Stack } from '../components'; import { Window } from '../layouts'; type LoadoutTabData = { diff --git a/tgui/packages/tgui/interfaces/LockedSafe.tsx b/tgui/packages/tgui/interfaces/LockedSafe.tsx index 76ddb8979c3..ba8d6bc9661 100644 --- a/tgui/packages/tgui/interfaces/LockedSafe.tsx +++ b/tgui/packages/tgui/interfaces/LockedSafe.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Flex } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/LogViewer.tsx b/tgui/packages/tgui/interfaces/LogViewer.tsx index 882a1361086..be8aa1c073c 100644 --- a/tgui/packages/tgui/interfaces/LogViewer.tsx +++ b/tgui/packages/tgui/interfaces/LogViewer.tsx @@ -1,4 +1,5 @@ import { useState } from 'react'; + import { useBackend } from '../backend'; import { Button, diff --git a/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.jsx b/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.jsx index d452e272d8f..1e259657984 100644 --- a/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.jsx +++ b/tgui/packages/tgui/interfaces/LuaEditor/ChunkViewModal.jsx @@ -1,8 +1,9 @@ -import { useLocalState } from '../../backend'; -import { Button, Modal, Section, Box } from '../../components'; -import { sanitizeText } from '../../sanitize'; import hljs from 'highlight.js/lib/core'; +import { useLocalState } from '../../backend'; +import { Box, Button, Modal, Section } from '../../components'; +import { sanitizeText } from '../../sanitize'; + export const ChunkViewModal = (props) => { const [, setModal] = useLocalState('modal'); const [viewedChunk, setViewedChunk] = useLocalState('viewedChunk'); diff --git a/tgui/packages/tgui/interfaces/LuaEditor/Log.jsx b/tgui/packages/tgui/interfaces/LuaEditor/Log.jsx index 6358670502b..6b3100f086c 100644 --- a/tgui/packages/tgui/interfaces/LuaEditor/Log.jsx +++ b/tgui/packages/tgui/interfaces/LuaEditor/Log.jsx @@ -1,6 +1,6 @@ import { useBackend, useLocalState } from '../../backend'; -import { logger } from '../../logging'; import { Box, Button, Divider } from '../../components'; +import { logger } from '../../logging'; import { ListMapper } from './ListMapper'; export const Log = (props) => { diff --git a/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.jsx b/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.jsx index 9294d22ca49..49ede4ed247 100644 --- a/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.jsx +++ b/tgui/packages/tgui/interfaces/LuaEditor/StateSelectModal.jsx @@ -1,5 +1,5 @@ import { useBackend, useLocalState } from '../../backend'; -import { Button, Modal, Input, Section, Stack } from '../../components'; +import { Button, Input, Modal, Section, Stack } from '../../components'; export const StateSelectModal = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/LuaEditor/index.jsx b/tgui/packages/tgui/interfaces/LuaEditor/index.jsx index 3a80487c2b2..3fec23af3cb 100644 --- a/tgui/packages/tgui/interfaces/LuaEditor/index.jsx +++ b/tgui/packages/tgui/interfaces/LuaEditor/index.jsx @@ -1,28 +1,29 @@ +import hljs from 'highlight.js/lib/core'; +import lua from 'highlight.js/lib/languages/lua'; +import { marked } from 'marked'; +import { Component, createRef } from 'react'; + import { useBackend, useLocalState } from '../../backend'; import { Box, Button, Flex, + Modal, + NoticeBox, + ProgressBar, Section, + Stack, Tabs, TextArea, - Modal, - Stack, - ProgressBar, - NoticeBox, } from '../../components'; import { Window } from '../../layouts'; +import { sanitizeText } from '../../sanitize'; import { CallModal } from './CallModal'; import { ChunkViewModal } from './ChunkViewModal'; -import { StateSelectModal } from './StateSelectModal'; import { ListMapper } from './ListMapper'; import { Log } from './Log'; +import { StateSelectModal } from './StateSelectModal'; import { TaskManager } from './TaskManager'; -import { sanitizeText } from '../../sanitize'; -import { marked } from 'marked'; -import { Component, createRef } from 'react'; -import hljs from 'highlight.js/lib/core'; -import lua from 'highlight.js/lib/languages/lua'; hljs.registerLanguage('lua', lua); export class LuaEditor extends Component { diff --git a/tgui/packages/tgui/interfaces/MODpaint.jsx b/tgui/packages/tgui/interfaces/MODpaint.jsx index 1cd842bb937..7a047b38426 100644 --- a/tgui/packages/tgui/interfaces/MODpaint.jsx +++ b/tgui/packages/tgui/interfaces/MODpaint.jsx @@ -1,15 +1,16 @@ +import { capitalize } from 'common/string'; + import { useBackend } from '../backend'; import { Box, - Stack, - Section, - ByondUi, - Slider, - Flex, Button, + ByondUi, + Flex, + Section, + Slider, + Stack, } from '../components'; import { Window } from '../layouts'; -import { capitalize } from 'common/string'; const colorToMatrix = (param) => { switch (param) { diff --git a/tgui/packages/tgui/interfaces/MODsuit.tsx b/tgui/packages/tgui/interfaces/MODsuit.tsx index 1a3b8b3461c..f4f9654abc2 100644 --- a/tgui/packages/tgui/interfaces/MODsuit.tsx +++ b/tgui/packages/tgui/interfaces/MODsuit.tsx @@ -1,25 +1,26 @@ import { BooleanLike } from 'common/react'; -import { formatSiUnit } from '../format'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { + AnimatedNumber, + Box, Button, + Collapsible, ColorBox, + Dimmer, + Dropdown, + Icon, LabeledList, + NoticeBox, + NumberInput, ProgressBar, Section, - Collapsible, - Box, - Icon, Stack, Table, - Dimmer, - NumberInput, - AnimatedNumber, - Dropdown, - NoticeBox, } from '../components'; +import { formatSiUnit } from '../format'; import { Window } from '../layouts'; -import { useState } from 'react'; type MODsuitData = { // Static diff --git a/tgui/packages/tgui/interfaces/MafiaPanel.tsx b/tgui/packages/tgui/interfaces/MafiaPanel.tsx index 5437f2dfb82..ab22e8b6c0f 100644 --- a/tgui/packages/tgui/interfaces/MafiaPanel.tsx +++ b/tgui/packages/tgui/interfaces/MafiaPanel.tsx @@ -1,6 +1,7 @@ import { BooleanLike, classes } from 'common/react'; import { decodeHtmlEntities } from 'common/string'; import { multiline } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Box, @@ -13,8 +14,8 @@ import { Tabs, TextArea, } from '../components'; -import { Window } from '../layouts'; import { formatTime } from '../format'; +import { Window } from '../layouts'; type RoleInfo = { role_theme: string; diff --git a/tgui/packages/tgui/interfaces/MarkdownViewer.tsx b/tgui/packages/tgui/interfaces/MarkdownViewer.tsx index 66701658111..9ee7764f9ed 100644 --- a/tgui/packages/tgui/interfaces/MarkdownViewer.tsx +++ b/tgui/packages/tgui/interfaces/MarkdownViewer.tsx @@ -1,4 +1,5 @@ import { marked } from 'marked'; + import { useBackend } from '../backend'; import { Window } from '../layouts'; import { sanitizeText } from '../sanitize'; diff --git a/tgui/packages/tgui/interfaces/MassDriverControl.jsx b/tgui/packages/tgui/interfaces/MassDriverControl.jsx index 91e7cc04d30..d7be26c671e 100644 --- a/tgui/packages/tgui/interfaces/MassDriverControl.jsx +++ b/tgui/packages/tgui/interfaces/MassDriverControl.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Box, Button, Section, LabeledList, NumberInput } from '../components'; +import { Box, Button, LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; export const MassDriverControl = (props) => { diff --git a/tgui/packages/tgui/interfaces/MassSpec.jsx b/tgui/packages/tgui/interfaces/MassSpec.jsx index 95c585e50cd..29d7fb8269d 100644 --- a/tgui/packages/tgui/interfaces/MassSpec.jsx +++ b/tgui/packages/tgui/interfaces/MassSpec.jsx @@ -1,4 +1,5 @@ import { round } from 'common/math'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/MatMarket.tsx b/tgui/packages/tgui/interfaces/MatMarket.tsx index 3962973a30e..5e25c4a5a00 100644 --- a/tgui/packages/tgui/interfaces/MatMarket.tsx +++ b/tgui/packages/tgui/interfaces/MatMarket.tsx @@ -1,9 +1,10 @@ -import { useBackend } from '../backend'; -import { Section, Stack, Button, Modal } from '../components'; -import { Window } from '../layouts'; import { BooleanLike } from 'common/react'; import { toTitleCase } from 'common/string'; + +import { useBackend } from '../backend'; +import { Button, Modal, Section, Stack } from '../components'; import { formatMoney } from '../format'; +import { Window } from '../layouts'; type Material = { name: string; diff --git a/tgui/packages/tgui/interfaces/MatrixMathTester.tsx b/tgui/packages/tgui/interfaces/MatrixMathTester.tsx index bbff8655e33..6e0e53a58f6 100644 --- a/tgui/packages/tgui/interfaces/MatrixMathTester.tsx +++ b/tgui/packages/tgui/interfaces/MatrixMathTester.tsx @@ -1,6 +1,7 @@ -import { useBackend, useLocalState } from '../backend'; -import { Input, NumberInput, Section, Button, Table } from '../components'; import { toFixed } from 'common/math'; + +import { useBackend, useLocalState } from '../backend'; +import { Button, Input, NumberInput, Section, Table } from '../components'; import { Window } from '../layouts'; const MatrixMathTesterInput = (props: { value: number; varName: string }) => { diff --git a/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx b/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx index 4af668da428..8f5d94831b2 100644 --- a/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/AlertPane.tsx @@ -1,5 +1,5 @@ import { useBackend } from '../../backend'; -import { Section, Stack, Button, Box, Icon, Dimmer } from '../../components'; +import { Box, Button, Dimmer, Icon, Section, Stack } from '../../components'; import { MainData } from './data'; export const InternalDamageToDamagedDesc = { diff --git a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx index 4a8350c5e43..ab8eb2e728f 100644 --- a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx @@ -1,21 +1,22 @@ +import { toFixed } from 'common/math'; +import { classes } from 'common/react'; +import { GasmixParser } from 'tgui/interfaces/common/GasmixParser'; + import { useBackend } from '../../backend'; import { - Icon, - NumberInput, - ProgressBar, Box, Button, - Section, - Stack, + Collapsible, + Icon, LabeledList, NoticeBox, - Collapsible, + NumberInput, + ProgressBar, + Section, + Stack, } from '../../components'; -import { MainData, MechModule } from './data'; -import { classes } from 'common/react'; -import { toFixed } from 'common/math'; import { formatPower } from '../../format'; -import { GasmixParser } from 'tgui/interfaces/common/GasmixParser'; +import { MainData, MechModule } from './data'; const moduleSlotIcon = (param) => { switch (param) { diff --git a/tgui/packages/tgui/interfaces/Mecha/index.tsx b/tgui/packages/tgui/interfaces/Mecha/index.tsx index cfae2676878..59c6377ef40 100644 --- a/tgui/packages/tgui/interfaces/Mecha/index.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/index.tsx @@ -1,18 +1,18 @@ -import { Window } from '../../layouts'; import { useBackend, useLocalState } from '../../backend'; import { - ByondUi, - Stack, Button, - Section, - ProgressBar, + ByondUi, LabeledList, + ProgressBar, + Section, + Stack, } from '../../components'; import { formatSiUnit } from '../../format'; -import { ModulesPane } from './ModulesPane'; -import { AlertPane } from './AlertPane'; +import { Window } from '../../layouts'; import { AccessConfig } from '../common/AccessConfig'; +import { AlertPane } from './AlertPane'; import { MainData } from './data'; +import { ModulesPane } from './ModulesPane'; export const Mecha = (props) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx index 1d44d7a4b14..5d8b081e0ef 100644 --- a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx +++ b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx @@ -1,4 +1,5 @@ import { multiline } from 'common/string'; + import { useBackend, useSharedState } from '../backend'; import { AnimatedNumber, diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx index 6541068ad29..231c057853c 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx @@ -11,6 +11,7 @@ import { TextArea, Tooltip, } from 'tgui/components'; + import { getMedicalRecord } from './helpers'; import { MedicalNote, MedicalRecordData } from './types'; diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx index b3cb0997215..fa8e4a521e1 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx @@ -2,15 +2,16 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { useBackend, useLocalState } from 'tgui/backend'; import { - Stack, - Input, - Section, - Tabs, - NoticeBox, Box, - Icon, Button, + Icon, + Input, + NoticeBox, + Section, + Stack, + Tabs, } from 'tgui/components'; + import { JOB2ICON } from '../common/JobToIcon'; import { isRecordMatch } from '../SecurityRecords/helpers'; import { MedicalRecord, MedicalRecordData } from './types'; diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx index 24c04486cde..b9c8ffb7d78 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx @@ -1,26 +1,27 @@ -import { NoteKeeper } from './NoteKeeper'; import { - Stack, - Section, - NoticeBox, Box, - LabeledList, Button, + LabeledList, + NoticeBox, RestrictedInput, + Section, + Stack, } from 'tgui/components'; -import { CharacterPreview } from '../common/CharacterPreview'; -import { getMedicalRecord, getQuirkStrings } from './helpers'; + import { useBackend } from '../../backend'; +import { CharacterPreview } from '../common/CharacterPreview'; +import { EditableText } from '../common/EditableText'; import { - PHYSICALSTATUS2COLOR, - PHYSICALSTATUS2DESC, - PHYSICALSTATUS2ICON, MENTALSTATUS2COLOR, MENTALSTATUS2DESC, MENTALSTATUS2ICON, + PHYSICALSTATUS2COLOR, + PHYSICALSTATUS2DESC, + PHYSICALSTATUS2ICON, } from './constants'; +import { getMedicalRecord, getQuirkStrings } from './helpers'; +import { NoteKeeper } from './NoteKeeper'; import { MedicalRecordData } from './types'; -import { EditableText } from '../common/EditableText'; /** Views a selected record. */ export const MedicalRecordView = (props) => { diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/helpers.ts b/tgui/packages/tgui/interfaces/MedicalRecords/helpers.ts index 6a870648e7d..8ad9668449f 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/helpers.ts +++ b/tgui/packages/tgui/interfaces/MedicalRecords/helpers.ts @@ -1,4 +1,5 @@ -import { useLocalState, useBackend } from 'tgui/backend'; +import { useBackend, useLocalState } from 'tgui/backend'; + import { MedicalRecord, MedicalRecordData } from './types'; /** Splits a medical string on
into a string array */ diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/index.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/index.tsx index 34bd83433e4..05ae556d324 100644 --- a/tgui/packages/tgui/interfaces/MedicalRecords/index.tsx +++ b/tgui/packages/tgui/interfaces/MedicalRecords/index.tsx @@ -1,6 +1,7 @@ -import { Window } from 'tgui/layouts'; import { useBackend } from 'tgui/backend'; import { Box, Button, Icon, NoticeBox, Stack } from 'tgui/components'; +import { Window } from 'tgui/layouts'; + import { MedicalRecordTabs } from './RecordTabs'; import { MedicalRecordView } from './RecordView'; import { MedicalRecordData } from './types'; diff --git a/tgui/packages/tgui/interfaces/MemoryPanel.jsx b/tgui/packages/tgui/interfaces/MemoryPanel.jsx index dd57a659c06..844e13a325a 100644 --- a/tgui/packages/tgui/interfaces/MemoryPanel.jsx +++ b/tgui/packages/tgui/interfaces/MemoryPanel.jsx @@ -1,6 +1,7 @@ +import { multiline } from 'common/string'; + import { useBackend } from '../backend'; import { Button, Dimmer, Section, Stack } from '../components'; -import { multiline } from 'common/string'; import { Window } from '../layouts'; const STORY_VALUE_KEY = -1; diff --git a/tgui/packages/tgui/interfaces/MessageMonitor.tsx b/tgui/packages/tgui/interfaces/MessageMonitor.tsx index 6d37fe97b0a..091210e1b34 100644 --- a/tgui/packages/tgui/interfaces/MessageMonitor.tsx +++ b/tgui/packages/tgui/interfaces/MessageMonitor.tsx @@ -1,13 +1,14 @@ import { BooleanLike } from 'common/react'; + import { useBackend, useLocalState } from '../backend'; import { + Box, + Button, + Input, + NoticeBox, Section, Stack, - Input, - Button, Table, - NoticeBox, - Box, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx b/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx index f9bf09b3944..f46a971c1fa 100644 --- a/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx +++ b/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx @@ -1,13 +1,14 @@ // THIS IS A SKYRAT UI FILE import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { - NoticeBox, - Section, - Stack, Button, LabeledList, + NoticeBox, ProgressBar, + Section, + Stack, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ModularShieldGen.tsx b/tgui/packages/tgui/interfaces/ModularShieldGen.tsx index d8cc808bb47..3128417e540 100644 --- a/tgui/packages/tgui/interfaces/ModularShieldGen.tsx +++ b/tgui/packages/tgui/interfaces/ModularShieldGen.tsx @@ -1,15 +1,16 @@ -import { useBackend } from '../backend'; -import { Window } from '../layouts'; -import { - Stack, - Section, - ProgressBar, - Button, - NumberInput, - LabeledList, -} from '../components'; import { BooleanLike } from 'common/react'; +import { useBackend } from '../backend'; +import { + Button, + LabeledList, + NumberInput, + ProgressBar, + Section, + Stack, +} from '../components'; +import { Window } from '../layouts'; + type ModularShieldGenData = { max_strength: number; current_strength: number; diff --git a/tgui/packages/tgui/interfaces/NavBeacon.tsx b/tgui/packages/tgui/interfaces/NavBeacon.tsx index 19579e14fbe..5194fe42c1c 100644 --- a/tgui/packages/tgui/interfaces/NavBeacon.tsx +++ b/tgui/packages/tgui/interfaces/NavBeacon.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, @@ -9,7 +11,6 @@ import { } from '../components'; import { Window } from '../layouts'; import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; -import { BooleanLike } from 'common/react'; export type Data = { locked: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/NetpodOutfits.tsx b/tgui/packages/tgui/interfaces/NetpodOutfits.tsx index ccf64072926..606bc552ff1 100644 --- a/tgui/packages/tgui/interfaces/NetpodOutfits.tsx +++ b/tgui/packages/tgui/interfaces/NetpodOutfits.tsx @@ -1,3 +1,7 @@ +import { useState } from 'react'; + +import { createSearch } from '../../common/string'; +import { useBackend } from '../backend'; import { Button, Divider, @@ -7,11 +11,7 @@ import { Stack, Tabs, } from '../components'; -import { useBackend } from '../backend'; - import { Window } from '../layouts'; -import { createSearch } from '../../common/string'; -import { useState } from 'react'; type Data = { netsuit: string; diff --git a/tgui/packages/tgui/interfaces/Newscaster.jsx b/tgui/packages/tgui/interfaces/Newscaster.jsx index 32c56b96ff9..a15fc8ef9ba 100644 --- a/tgui/packages/tgui/interfaces/Newscaster.jsx +++ b/tgui/packages/tgui/interfaces/Newscaster.jsx @@ -6,9 +6,10 @@ */ import { decodeHtmlEntities } from 'common/string'; +import { marked } from 'marked'; +import { useState } from 'react'; + import { useBackend, useSharedState } from '../backend'; -import { BountyBoardContent } from './BountyBoard'; -import { UserDetails } from './Vending'; import { BlockQuote, Box, @@ -22,9 +23,9 @@ import { Tabs, TextArea, } from '../components'; -import { marked } from 'marked'; import { sanitizeText } from '../sanitize'; -import { useState } from 'react'; +import { BountyBoardContent } from './BountyBoard'; +import { UserDetails } from './Vending'; const CENSOR_MESSAGE = 'This channel has been deemed as threatening to \ diff --git a/tgui/packages/tgui/interfaces/NifPanel.jsx b/tgui/packages/tgui/interfaces/NifPanel.jsx index adcf8322d9f..8fddb3dad13 100644 --- a/tgui/packages/tgui/interfaces/NifPanel.jsx +++ b/tgui/packages/tgui/interfaces/NifPanel.jsx @@ -1,21 +1,21 @@ // THIS IS A SKYRAT UI FILE import { useBackend, useLocalState } from '../backend'; -import { Window } from '../layouts'; import { + BlockQuote, Box, + Button, + Collapsible, Dropdown, + Flex, + Icon, + Input, LabeledList, ProgressBar, Section, - Button, - Input, - BlockQuote, - Flex, - Collapsible, Table, - Icon, } from '../components'; import { TableCell, TableRow } from '../components/Table'; +import { Window } from '../layouts'; export const NifPanel = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/NifSoulPoem.jsx b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx index 8076ff17da5..acbd502c1c7 100644 --- a/tgui/packages/tgui/interfaces/NifSoulPoem.jsx +++ b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx @@ -1,16 +1,16 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; -import { Window } from '../layouts'; import { - Section, + BlockQuote, + Box, + Button, Divider, Flex, - Box, - BlockQuote, Input, LabeledList, - Button, + Section, } from '../components'; +import { Window } from '../layouts'; export const NifSoulPoem = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/NoticeBoard.tsx b/tgui/packages/tgui/interfaces/NoticeBoard.tsx index e39a07067f8..27c9079dfe5 100644 --- a/tgui/packages/tgui/interfaces/NoticeBoard.tsx +++ b/tgui/packages/tgui/interfaces/NoticeBoard.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NotificationPreferences.jsx b/tgui/packages/tgui/interfaces/NotificationPreferences.jsx index 51b2fa794c0..aebe53bb94c 100644 --- a/tgui/packages/tgui/interfaces/NotificationPreferences.jsx +++ b/tgui/packages/tgui/interfaces/NotificationPreferences.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Section, Button } from '../components'; +import { Button, Section } from '../components'; import { Window } from '../layouts'; export const NotificationPreferences = (props) => { diff --git a/tgui/packages/tgui/interfaces/NtnetRelay.tsx b/tgui/packages/tgui/interfaces/NtnetRelay.tsx index 6fd070d7bb8..e7c4b9d2b9d 100644 --- a/tgui/packages/tgui/interfaces/NtnetRelay.tsx +++ b/tgui/packages/tgui/interfaces/NtnetRelay.tsx @@ -1,11 +1,12 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { + AnimatedNumber, Box, Button, ProgressBar, Section, - AnimatedNumber, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx b/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx index adad36a35a5..b1bbe418ce7 100644 --- a/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx +++ b/tgui/packages/tgui/interfaces/NtosBountyBoard.tsx @@ -1,5 +1,5 @@ -import { BountyBoardContent } from './BountyBoard'; import { NtosWindow } from '../layouts'; +import { BountyBoardContent } from './BountyBoard'; export const NtosBountyBoard = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosCamera.jsx b/tgui/packages/tgui/interfaces/NtosCamera.jsx index d875800014a..8e0aaad65c7 100644 --- a/tgui/packages/tgui/interfaces/NtosCamera.jsx +++ b/tgui/packages/tgui/interfaces/NtosCamera.jsx @@ -1,6 +1,6 @@ import { useBackend } from '../backend'; -import { NtosWindow } from '../layouts'; import { Button, Image, NoticeBox, Stack } from '../components'; +import { NtosWindow } from '../layouts'; export const NtosCamera = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosCard.tsx b/tgui/packages/tgui/interfaces/NtosCard.tsx index d7eac169b65..c932035c4db 100644 --- a/tgui/packages/tgui/interfaces/NtosCard.tsx +++ b/tgui/packages/tgui/interfaces/NtosCard.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/NtosCargo.tsx b/tgui/packages/tgui/interfaces/NtosCargo.tsx index c087b94893b..19e36180f4b 100644 --- a/tgui/packages/tgui/interfaces/NtosCargo.tsx +++ b/tgui/packages/tgui/interfaces/NtosCargo.tsx @@ -1,5 +1,5 @@ -import { CargoContent } from './Cargo'; import { NtosWindow } from '../layouts'; +import { CargoContent } from './Cargo'; export const NtosCargo = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx index f8bc25206ca..d8830fe79af 100644 --- a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx +++ b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx @@ -1,4 +1,5 @@ import { map } from 'common/collections'; + import { useBackend } from '../backend'; import { Button, Section, Table } from '../components'; import { NtosWindow } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx index 0a6ef1f0a5d..1c2b2dd73a3 100644 --- a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx +++ b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx @@ -1,8 +1,9 @@ import { classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; -import { Button, Input, Section, Image } from '../components'; +import { Button, Image, Input, Section } from '../components'; import { NtosWindow } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx index caf3836e018..ac186e84db5 100644 --- a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx +++ b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button } from '../components'; import { NtosWindow } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosJobManager.jsx b/tgui/packages/tgui/interfaces/NtosJobManager.jsx index e02d4a4efa3..53f2ea2b220 100644 --- a/tgui/packages/tgui/interfaces/NtosJobManager.jsx +++ b/tgui/packages/tgui/interfaces/NtosJobManager.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Button, Section, Table, NoticeBox, Dimmer, Box } from '../components'; +import { Box, Button, Dimmer, NoticeBox, Section, Table } from '../components'; import { NtosWindow } from '../layouts'; export const NtosJobManager = (props) => { diff --git a/tgui/packages/tgui/interfaces/NtosMODsuit.jsx b/tgui/packages/tgui/interfaces/NtosMODsuit.jsx index 59a7f38f86c..23d46906fd3 100644 --- a/tgui/packages/tgui/interfaces/NtosMODsuit.jsx +++ b/tgui/packages/tgui/interfaces/NtosMODsuit.jsx @@ -1,6 +1,6 @@ -import { NtosWindow } from '../layouts'; import { useBackend } from '../backend'; import { NoticeBox } from '../components'; +import { NtosWindow } from '../layouts'; import { MODsuitContent } from './MODsuit'; export const NtosMODsuit = (props) => { diff --git a/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx b/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx index d19e962050f..09a0f6ddee9 100644 --- a/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx +++ b/tgui/packages/tgui/interfaces/NtosMafiaPanel.tsx @@ -1,5 +1,5 @@ -import { MafiaPanelData } from './MafiaPanel'; import { NtosWindow } from '../layouts'; +import { MafiaPanelData } from './MafiaPanel'; export const NtosMafiaPanel = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosMain.tsx b/tgui/packages/tgui/interfaces/NtosMain.tsx index 2ff202ddee4..86b53387d0d 100644 --- a/tgui/packages/tgui/interfaces/NtosMain.tsx +++ b/tgui/packages/tgui/interfaces/NtosMain.tsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Button, ColorBox, Stack, Section, Table } from '../components'; +import { Button, ColorBox, Section, Stack, Table } from '../components'; import { NtosWindow } from '../layouts'; import { NTOSData } from '../layouts/NtosWindow'; diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx index 64e5828a9e1..fc390faa955 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx @@ -1,19 +1,20 @@ +import { BooleanLike } from 'common/react'; +import { decodeHtmlEntities } from 'common/string'; +import { Component, createRef, RefObject } from 'react'; + +import { useBackend } from '../../backend'; import { - Stack, - Section, - Button, Box, - Input, - Modal, - Tooltip, + Button, Icon, Image, + Input, + Modal, + Section, + Stack, + Tooltip, } from '../../components'; -import { Component, RefObject, createRef } from 'react'; import { NtMessage, NtMessenger, NtPicture } from './types'; -import { BooleanLike } from 'common/react'; -import { useBackend } from '../../backend'; -import { decodeHtmlEntities } from 'common/string'; type ChatScreenProps = { canReply: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx index ea55acca910..e6a29c5d7b1 100644 --- a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx +++ b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx @@ -1,22 +1,22 @@ +import { sortBy } from 'common/collections'; +import { BooleanLike } from 'common/react'; +import { createSearch } from 'common/string'; + +import { useBackend, useLocalState } from '../../backend'; import { Box, Button, - Icon, - Section, - Stack, - Input, - TextArea, Dimmer, Divider, + Icon, + Input, + Section, + Stack, + TextArea, } from '../../components'; -import { useBackend, useLocalState } from '../../backend'; -import { createSearch } from 'common/string'; -import { BooleanLike } from 'common/react'; import { NtosWindow } from '../../layouts'; - -import { NtChat, NtMessenger, NtPicture } from './types'; import { ChatScreen } from './ChatScreen'; -import { sortBy } from 'common/collections'; +import { NtChat, NtMessenger, NtPicture } from './types'; type NtosMessengerData = { can_spam: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx index 8dae01e0150..5cf73bca6eb 100644 --- a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx +++ b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx @@ -1,23 +1,24 @@ -import { BooleanLike } from 'common/react'; +import { filter, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; import { scale, toFixed } from 'common/math'; -import { useBackend } from '../backend'; +import { BooleanLike } from 'common/react'; import { createSearch } from 'common/string'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; import { Box, Button, - Stack, Icon, Input, LabeledList, NoticeBox, ProgressBar, Section, + Stack, Tabs, } from '../components'; -import { flow } from 'common/fp'; -import { filter, sortBy } from 'common/collections'; import { NtosWindow } from '../layouts'; -import { useState } from 'react'; type Data = { disk_size: number; diff --git a/tgui/packages/tgui/interfaces/NtosNetMonitor.jsx b/tgui/packages/tgui/interfaces/NtosNetMonitor.jsx index 5e28cd2eacb..999ed0ff32b 100644 --- a/tgui/packages/tgui/interfaces/NtosNetMonitor.jsx +++ b/tgui/packages/tgui/interfaces/NtosNetMonitor.jsx @@ -2,9 +2,9 @@ import { useBackend, useSharedState } from '../backend'; import { Box, Button, + Icon, LabeledList, NoticeBox, - Icon, Section, Stack, Tabs, diff --git a/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx index 1301131dbfd..cc54bb45883 100644 --- a/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx +++ b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx @@ -1,17 +1,17 @@ // THIS IS A SKYRAT UI FILE import { useBackend, useSharedState } from '../backend'; -import { NtosWindow } from '../layouts'; import { BlockQuote, + Box, Button, Collapsible, Flex, + Icon, + LabeledList, Section, Tabs, - LabeledList, - Box, - Icon, } from '../components'; +import { NtosWindow } from '../layouts'; export const NtosNifsoftCatalog = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/NtosNotepad.tsx b/tgui/packages/tgui/interfaces/NtosNotepad.tsx index 170842a962a..a0fbb94f6fb 100644 --- a/tgui/packages/tgui/interfaces/NtosNotepad.tsx +++ b/tgui/packages/tgui/interfaces/NtosNotepad.tsx @@ -4,12 +4,13 @@ * @license MIT */ -import { NtosWindow } from '../layouts'; -import { useBackend, useLocalState } from '../backend'; -import { Box, Section, TextArea, MenuBar, Divider } from '../components'; import { Component, createRef, RefObject } from 'react'; -import { createLogger } from '../logging'; + +import { useBackend, useLocalState } from '../backend'; +import { Box, Divider, MenuBar, Section, TextArea } from '../components'; import { Dialog, UnsavedChangesDialog } from '../components/Dialog'; +import { NtosWindow } from '../layouts'; +import { createLogger } from '../logging'; const logger = createLogger('NtosNotepad'); diff --git a/tgui/packages/tgui/interfaces/NtosPay.tsx b/tgui/packages/tgui/interfaces/NtosPay.tsx index 44648d61e19..deabf351d7b 100644 --- a/tgui/packages/tgui/interfaces/NtosPay.tsx +++ b/tgui/packages/tgui/interfaces/NtosPay.tsx @@ -1,17 +1,17 @@ -import { NtosWindow } from '../layouts'; import { useBackend } from '../backend'; import { - Stack, - Section, Box, Button, + Divider, Input, + NoticeBox, + RestrictedInput, + Section, + Stack, Table, Tooltip, - NoticeBox, - Divider, - RestrictedInput, } from '../components'; +import { NtosWindow } from '../layouts'; type Data = { name: string; diff --git a/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx b/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx index fdf1481ff6b..a991f4f1aa2 100644 --- a/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx +++ b/tgui/packages/tgui/interfaces/NtosPhysScanner.jsx @@ -1,6 +1,6 @@ import { useBackend } from '../backend'; +import { Box, Section } from '../components'; import { NtosWindow } from '../layouts'; -import { Section, Box } from '../components'; import { sanitizeText } from '../sanitize'; export const NtosPhysScanner = (props) => { diff --git a/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx b/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx index 355c12f7717..a4b7dcb3245 100644 --- a/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx +++ b/tgui/packages/tgui/interfaces/NtosPortraitPrinter.jsx @@ -1,8 +1,9 @@ +import { useState } from 'react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; -import { Button, NoticeBox, Section, Stack, Image, Input } from '../components'; +import { Button, Image, Input, NoticeBox, Section, Stack } from '../components'; import { NtosWindow } from '../layouts'; -import { useState } from 'react'; export const NtosPortraitPrinter = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/NtosRadar.tsx b/tgui/packages/tgui/interfaces/NtosRadar.tsx index 4464b0a208b..851b0ed81bd 100644 --- a/tgui/packages/tgui/interfaces/NtosRadar.tsx +++ b/tgui/packages/tgui/interfaces/NtosRadar.tsx @@ -1,7 +1,8 @@ import { BooleanLike, classes } from 'common/react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; -import { Image, Button, Icon, NoticeBox, Section, Stack } from '../components'; +import { Button, Icon, Image, NoticeBox, Section, Stack } from '../components'; import { NtosWindow } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/NtosRecords.jsx b/tgui/packages/tgui/interfaces/NtosRecords.jsx index 98f1299731a..58f4e7f53b7 100644 --- a/tgui/packages/tgui/interfaces/NtosRecords.jsx +++ b/tgui/packages/tgui/interfaces/NtosRecords.jsx @@ -1,8 +1,9 @@ import { createSearch } from 'common/string'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Icon, Input, Section } from '../components'; import { NtosWindow } from '../layouts'; -import { useState } from 'react'; export const NtosRecords = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/NtosRevelation.tsx b/tgui/packages/tgui/interfaces/NtosRevelation.tsx index dc69a3a320b..3800fed22a1 100644 --- a/tgui/packages/tgui/interfaces/NtosRevelation.tsx +++ b/tgui/packages/tgui/interfaces/NtosRevelation.tsx @@ -1,8 +1,9 @@ -import { Section, Button, LabeledList } from '../components'; -import { useBackend } from '../backend'; -import { NtosWindow } from '../layouts'; import { BooleanLike } from 'common/react'; +import { useBackend } from '../backend'; +import { Button, LabeledList, Section } from '../components'; +import { NtosWindow } from '../layouts'; + type Data = { armed: BooleanLike; }; diff --git a/tgui/packages/tgui/interfaces/NtosRobotact.jsx b/tgui/packages/tgui/interfaces/NtosRobotact.jsx index d190682ed7b..75f4ae90c0a 100644 --- a/tgui/packages/tgui/interfaces/NtosRobotact.jsx +++ b/tgui/packages/tgui/interfaces/NtosRobotact.jsx @@ -1,3 +1,5 @@ +import { useState } from 'react'; + import { useBackend } from '../backend'; import { AnimatedNumber, @@ -11,7 +13,6 @@ import { Tabs, } from '../components'; import { NtosWindow } from '../layouts'; -import { useState } from 'react'; export const NtosRobotact = (props) => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosScipaper.jsx b/tgui/packages/tgui/interfaces/NtosScipaper.jsx index e28ff4c39f7..3866ccab24c 100644 --- a/tgui/packages/tgui/interfaces/NtosScipaper.jsx +++ b/tgui/packages/tgui/interfaces/NtosScipaper.jsx @@ -1,19 +1,19 @@ import { useBackend } from '../backend'; import { BlockQuote, + Box, Button, Collapsible, Dropdown, + Icon, Input, LabeledList, + NoticeBox, Section, Stack, - Tabs, - Box, Table, - NoticeBox, + Tabs, Tooltip, - Icon, } from '../components'; import { TableCell, TableRow } from '../components/Table'; import { NtosWindow } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosShipping.tsx b/tgui/packages/tgui/interfaces/NtosShipping.tsx index 08797f82099..1270252d13e 100644 --- a/tgui/packages/tgui/interfaces/NtosShipping.tsx +++ b/tgui/packages/tgui/interfaces/NtosShipping.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section } from '../components'; import { NtosWindow } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosSignaler.tsx b/tgui/packages/tgui/interfaces/NtosSignaler.tsx index 9a829428427..4eff802e5a7 100644 --- a/tgui/packages/tgui/interfaces/NtosSignaler.tsx +++ b/tgui/packages/tgui/interfaces/NtosSignaler.tsx @@ -1,5 +1,5 @@ -import { SignalerContent } from './Signaler'; import { NtosWindow } from '../layouts'; +import { SignalerContent } from './Signaler'; export const NtosSignaler = () => { return ( diff --git a/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx b/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx index e63776a4444..fd42d35ae74 100644 --- a/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx +++ b/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx @@ -1,11 +1,11 @@ import { useBackend } from '../backend'; import { + AnimatedNumber, + BlockQuote, Button, + ProgressBar, Section, Table, - BlockQuote, - ProgressBar, - AnimatedNumber, } from '../components'; import { NtosWindow } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NtosSupermatter.tsx b/tgui/packages/tgui/interfaces/NtosSupermatter.tsx index 7476ac9092c..3b271ef1faf 100644 --- a/tgui/packages/tgui/interfaces/NtosSupermatter.tsx +++ b/tgui/packages/tgui/interfaces/NtosSupermatter.tsx @@ -1,8 +1,9 @@ +import { useState } from 'react'; + import { useBackend } from '../backend'; +import { Button, ProgressBar, Section, Table } from '../components'; import { NtosWindow } from '../layouts'; import { SupermatterContent, SupermatterData } from './Supermatter'; -import { Button, ProgressBar, Section, Table } from '../components'; -import { useState } from 'react'; type NtosSupermatterData = SupermatterData & { focus_uid?: number }; diff --git a/tgui/packages/tgui/interfaces/NuclearBomb.jsx b/tgui/packages/tgui/interfaces/NuclearBomb.jsx index 35f5fe68d4f..81b2e622e9d 100644 --- a/tgui/packages/tgui/interfaces/NuclearBomb.jsx +++ b/tgui/packages/tgui/interfaces/NuclearBomb.jsx @@ -1,4 +1,5 @@ import { classes } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, Flex, Grid, Icon } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/NumberInputModal.tsx b/tgui/packages/tgui/interfaces/NumberInputModal.tsx index 9e5ddf7a301..650764c7ea9 100644 --- a/tgui/packages/tgui/interfaces/NumberInputModal.tsx +++ b/tgui/packages/tgui/interfaces/NumberInputModal.tsx @@ -1,10 +1,11 @@ -import { Loader } from './common/Loader'; -import { InputButtons } from './common/InputButtons'; +import { KEY } from 'common/keys'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, RestrictedInput, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; -import { KEY } from 'common/keys'; +import { InputButtons } from './common/InputButtons'; +import { Loader } from './common/Loader'; type NumberInputData = { init_value: number; diff --git a/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx b/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx index 521c1945474..f267dc29fe2 100644 --- a/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx +++ b/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx @@ -1,22 +1,23 @@ // THIS IS A SKYRAT UI FILE import { round } from 'common/math'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { - Section, - Stack, - TextArea, - Button, - Tabs, - Input, - Slider, - NoticeBox, - LabeledList, Box, + Button, Collapsible, + Input, + LabeledList, + NoticeBox, NumberInput, + Section, + Slider, + Stack, + Tabs, + TextArea, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; export const OpposingForcePanel = (props) => { const [tab, setTab] = useState(1); diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts index f824adfede4..c12055e5472 100644 --- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -1,5 +1,6 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; + import { HEALTH, THREAT } from './constants'; import type { AntagGroup, Antagonist, Observable } from './types'; diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 4c2693002e4..00fe7d58cae 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -13,6 +13,7 @@ import { Stack, } from 'tgui/components'; import { Window } from 'tgui/layouts'; + import { JOB2ICON } from '../common/JobToIcon'; import { ANTAG2COLOR } from './constants'; import { diff --git a/tgui/packages/tgui/interfaces/OreBox.tsx b/tgui/packages/tgui/interfaces/OreBox.tsx index aab28970df7..24fb27bc327 100644 --- a/tgui/packages/tgui/interfaces/OreBox.tsx +++ b/tgui/packages/tgui/interfaces/OreBox.tsx @@ -1,6 +1,7 @@ import { toTitleCase } from 'common/string'; -import { Box, Button, Section, Table } from '../components'; + import { useBackend } from '../backend'; +import { Box, Button, Section, Table } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/OreContainer.tsx b/tgui/packages/tgui/interfaces/OreContainer.tsx index 7941e58e026..e65a8c72a3d 100644 --- a/tgui/packages/tgui/interfaces/OreContainer.tsx +++ b/tgui/packages/tgui/interfaces/OreContainer.tsx @@ -1,7 +1,8 @@ import { createSearch, toTitleCase } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; -import { Image, Button, Input, Stack, Flex, Section } from '../components'; +import { Button, Flex, Image, Input, Section, Stack } from '../components'; import { Window } from '../layouts'; type Ores = { diff --git a/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx b/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx index 3331e2eadb3..7a178a98a13 100644 --- a/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx +++ b/tgui/packages/tgui/interfaces/OreRedemptionMachine.jsx @@ -1,21 +1,22 @@ import { createSearch, toTitleCase } from 'common/string'; +import { useState } from 'react'; + import { useBackend, useSharedState } from '../backend'; import { BlockQuote, Box, Button, + Icon, + Image, + Input, + LabeledList, + Section, + Stack, Table, Tabs, - Input, - Stack, - Image, - Icon, - Section, - LabeledList, } from '../components'; -import { Window } from '../layouts'; import { formatSiUnit } from '../format'; -import { useState } from 'react'; +import { Window } from '../layouts'; export const OreRedemptionMachine = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PaiCard.tsx b/tgui/packages/tgui/interfaces/PaiCard.tsx index 3553ca801ee..10190d7a86e 100644 --- a/tgui/packages/tgui/interfaces/PaiCard.tsx +++ b/tgui/packages/tgui/interfaces/PaiCard.tsx @@ -1,4 +1,5 @@ import { decodeHtmlEntities } from 'common/string'; + import { BooleanLike } from '../../common/react'; import { useBackend } from '../backend'; import { diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx index 7f9f976e096..087d94332f2 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Available.tsx @@ -8,6 +8,7 @@ import { Table, Tooltip, } from 'tgui/components'; + import { SOFTWARE_DESC } from './constants'; import { PaiData } from './types'; diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx index 83145185674..02da38a319e 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Directives.tsx @@ -1,6 +1,7 @@ import { decodeHtmlEntities } from 'common/string'; import { useBackend } from 'tgui/backend'; import { BlockQuote, Box, LabeledList, Section, Stack } from 'tgui/components'; + import { DIRECTIVE_COMPREHENSION, DIRECTIVE_ORDER } from './constants'; import { PaiData } from './types'; diff --git a/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx b/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx index 797bec12d4a..4b7c65e8d34 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/Installed.tsx @@ -1,5 +1,6 @@ import { useBackend, useLocalState } from 'tgui/backend'; import { Button, NoticeBox, Section, Stack } from 'tgui/components'; + import { DOOR_JACK, HOST_SCAN, PHOTO_MODE, SOFTWARE_DESC } from './constants'; import { PaiData } from './types'; diff --git a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx index d31ded46966..fce6cb7e095 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/System.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/System.tsx @@ -1,5 +1,6 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, LabeledList, Section, Stack } from 'tgui/components'; + import { ICON_MAP } from './constants'; import { PaiData } from './types'; diff --git a/tgui/packages/tgui/interfaces/PaiInterface/index.tsx b/tgui/packages/tgui/interfaces/PaiInterface/index.tsx index a2a2bba368a..c581dfd52f4 100644 --- a/tgui/packages/tgui/interfaces/PaiInterface/index.tsx +++ b/tgui/packages/tgui/interfaces/PaiInterface/index.tsx @@ -1,8 +1,9 @@ import { useLocalState } from 'tgui/backend'; import { Stack, Tabs } from 'tgui/components'; import { Window } from 'tgui/layouts'; -import { PAI_TAB } from './constants'; + import { AvailableDisplay } from './Available'; +import { PAI_TAB } from './constants'; import { DirectiveDisplay } from './Directives'; import { InstalledDisplay } from './Installed'; import { SystemDisplay } from './System'; diff --git a/tgui/packages/tgui/interfaces/PaiSubmit.tsx b/tgui/packages/tgui/interfaces/PaiSubmit.tsx index b037c3870f8..85e7d48c2bf 100644 --- a/tgui/packages/tgui/interfaces/PaiSubmit.tsx +++ b/tgui/packages/tgui/interfaces/PaiSubmit.tsx @@ -1,4 +1,5 @@ import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, Input, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx b/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx index d01db3fb119..524d3d90040 100644 --- a/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx +++ b/tgui/packages/tgui/interfaces/PaintingAdminPanel.tsx @@ -1,5 +1,6 @@ import { decodeHtmlEntities } from 'common/string'; import { useState } from 'react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section, Table } from '../components'; diff --git a/tgui/packages/tgui/interfaces/PaintingMachine.jsx b/tgui/packages/tgui/interfaces/PaintingMachine.jsx index 4d827de27f0..fb98e5edb81 100644 --- a/tgui/packages/tgui/interfaces/PaintingMachine.jsx +++ b/tgui/packages/tgui/interfaces/PaintingMachine.jsx @@ -1,6 +1,6 @@ import { useBackend, useSharedState } from '../backend'; -import { Window } from '../layouts'; import { Button, Dropdown, Section, Stack } from '../components'; +import { Window } from '../layouts'; export const PaintingMachine = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Pandemic/Beaker.tsx b/tgui/packages/tgui/interfaces/Pandemic/Beaker.tsx index 583f98d28f9..e418b207738 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Beaker.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Beaker.tsx @@ -8,6 +8,7 @@ import { Section, Stack, } from 'tgui/components'; + import { Data } from './types'; /** Displays loaded container info, if it exists */ diff --git a/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx b/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx index e65bcd9ac76..9f37778605f 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Specimen.tsx @@ -1,7 +1,8 @@ import { useBackend, useLocalState } from 'tgui/backend'; import { Button, NoticeBox, Section, Stack, Tabs } from 'tgui/components'; -import { Data } from './types'; + import { SymptomDisplay } from './Symptom'; +import { Data } from './types'; import { VirusDisplay } from './Virus'; export const SpecimenDisplay = (props) => { diff --git a/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx b/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx index ec3a92e3bbf..cdbb49f715f 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Symptom.tsx @@ -6,6 +6,7 @@ import { Stack, Tooltip, } from 'tgui/components'; + import { getColor } from './helpers'; import { Threshold } from './types'; diff --git a/tgui/packages/tgui/interfaces/Pandemic/Virus.tsx b/tgui/packages/tgui/interfaces/Pandemic/Virus.tsx index 016297432c3..1ac70259c06 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/Virus.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/Virus.tsx @@ -8,6 +8,7 @@ import { Stack, Tooltip, } from 'tgui/components'; + import { getColor } from './helpers'; import { Data } from './types'; diff --git a/tgui/packages/tgui/interfaces/Pandemic/index.tsx b/tgui/packages/tgui/interfaces/Pandemic/index.tsx index 9e8fa70aa99..a895b2c0205 100644 --- a/tgui/packages/tgui/interfaces/Pandemic/index.tsx +++ b/tgui/packages/tgui/interfaces/Pandemic/index.tsx @@ -1,9 +1,10 @@ import { useBackend } from 'tgui/backend'; import { Stack } from 'tgui/components'; import { Window } from 'tgui/layouts'; -import { Data } from './types'; + import { BeakerDisplay } from './Beaker'; import { SpecimenDisplay } from './Specimen'; +import { Data } from './types'; export const Pandemic = (props) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PaperSheet.tsx b/tgui/packages/tgui/interfaces/PaperSheet.tsx index e99cecb5090..43f44bdb38f 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet.tsx +++ b/tgui/packages/tgui/interfaces/PaperSheet.tsx @@ -2,14 +2,15 @@ * @license MIT */ +import { clamp } from 'common/math'; import { classes } from 'common/react'; +import { marked } from 'marked'; +import { Component, createRef, RefObject } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, Button, Flex, Section, TextArea } from '../components'; import { Window } from '../layouts'; import { sanitizeText } from '../sanitize'; -import { marked } from 'marked'; -import { Component, createRef, RefObject } from 'react'; -import { clamp } from 'common/math'; const Z_INDEX_STAMP = 1; const Z_INDEX_STAMP_PREVIEW = 2; diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx index 947f382a8fb..3509c6d1851 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx @@ -2,11 +2,11 @@ import { useBackend, useLocalState } from '../../backend'; import { Box, Button, + ColorBox, + Dropdown, + Input, LabeledList, NumberInput, - ColorBox, - Input, - Dropdown, Stack, } from '../../components'; import { @@ -16,10 +16,10 @@ import { EntryIconStateProps, EntryTransformProps, MatrixTypes, - ParticleUIData, P_DATA_ICON_ADD, P_DATA_ICON_REMOVE, P_DATA_ICON_WEIGHT, + ParticleUIData, SpaceToNum, SpaceTypes, } from './data'; diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx index 65a1186dece..33bcd60b7fa 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx @@ -2,22 +2,22 @@ import { useBackend, useLocalState } from '../../backend'; import { Button, - LabeledList, - NumberInput, ColorBox, Input, + LabeledList, + NumberInput, Stack, } from '../../components'; import { EntryGeneratorNumbersListProps, FloatGeneratorColorProps, FloatGeneratorProps, - ParticleUIData, P_DATA_GENERATOR, + ParticleUIData, RandToNumber, } from './data'; -import { isStringArray } from './helpers'; import { GeneratorListEntry } from './Generators'; +import { isStringArray } from './helpers'; export const FloatGenerator = (props: FloatGeneratorProps) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx index 1ba17f2d670..c92e4b5be07 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx @@ -1,11 +1,11 @@ import { useBackend } from '../../backend'; -import { NumberInput, Dropdown, Stack } from '../../components'; +import { Dropdown, NumberInput, Stack } from '../../components'; import { GeneratorProps, GeneratorTypes, GeneratorTypesNoVectors, - ParticleUIData, P_DATA_GENERATOR, + ParticleUIData, RandToNumber, RandTypes, } from './data'; diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx index 795274e9454..b247cadd15b 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/Tutorial.tsx @@ -1,14 +1,14 @@ +import { resolveAsset } from '../../assets'; import { useLocalState } from '../../backend'; import { Box, Button, - LabeledList, - Section, - Modal, - Stack, Image, + LabeledList, + Modal, + Section, + Stack, } from '../../components'; -import { resolveAsset } from '../../assets'; export const ShowDesc = (props) => { const [desc, setdesc] = useLocalState('desc', ''); diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/index.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/index.tsx index f0487742cef..883b349fd4b 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/index.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/index.tsx @@ -3,20 +3,20 @@ import { useBackend, useLocalState } from '../../backend'; import { Button, LabeledList, Section } from '../../components'; import { Window } from '../../layouts'; import { ParticleUIData } from './data'; -import { ShowDesc } from './Tutorial'; import { - EntryFloat, EntryCoord, + EntryFloat, EntryGradient, - EntryTransform, EntryIcon, EntryIconState, + EntryTransform, } from './EntriesBasic'; import { + EntryGeneratorNumbersList, FloatGenerator, FloatGeneratorColor, - EntryGeneratorNumbersList, } from './EntriesGenerators'; +import { ShowDesc } from './Tutorial'; export const ParticleEdit = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx index 68614f061af..bd4b3231dad 100644 --- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx +++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx @@ -1,19 +1,20 @@ +import { filter, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; import { BooleanLike, classes } from 'common/react'; import { createSearch } from 'common/string'; -import { flow } from 'common/fp'; -import { filter, sortBy } from 'common/collections'; + import { useBackend, useLocalState } from '../backend'; import { - Divider, - Button, - Section, - Tabs, - Stack, Box, - Input, + Button, + Divider, Icon, - Tooltip, + Input, NoticeBox, + Section, + Stack, + Tabs, + Tooltip, } from '../components'; import { Window } from '../layouts'; import { Food } from './PreferencesMenu/data'; diff --git a/tgui/packages/tgui/interfaces/Photocopier.jsx b/tgui/packages/tgui/interfaces/Photocopier.jsx index e47f17f3847..91804a3a85f 100644 --- a/tgui/packages/tgui/interfaces/Photocopier.jsx +++ b/tgui/packages/tgui/interfaces/Photocopier.jsx @@ -1,4 +1,5 @@ import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/PhysicalNewscaster.tsx b/tgui/packages/tgui/interfaces/PhysicalNewscaster.tsx index 50f8e81e5db..7a4e0d97a7b 100644 --- a/tgui/packages/tgui/interfaces/PhysicalNewscaster.tsx +++ b/tgui/packages/tgui/interfaces/PhysicalNewscaster.tsx @@ -1,5 +1,5 @@ -import { Newscaster } from './Newscaster'; import { Window } from '../layouts'; +import { Newscaster } from './Newscaster'; export const PhysicalNewscaster = () => { return ( diff --git a/tgui/packages/tgui/interfaces/PipeDispenser.tsx b/tgui/packages/tgui/interfaces/PipeDispenser.tsx index c578c284fec..b9b1b312000 100644 --- a/tgui/packages/tgui/interfaces/PipeDispenser.tsx +++ b/tgui/packages/tgui/interfaces/PipeDispenser.tsx @@ -1,11 +1,12 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Button, LabeledList, Section, Stack, Tabs } from '../components'; import { Window } from '../layouts'; import { - ICON_BY_CATEGORY_NAME, ColorItem, + ICON_BY_CATEGORY_NAME, LayerSelect, SmartPipeBlockSection, } from './RapidPipeDispenser'; diff --git a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx index 71eb599b98a..0fbccd23fd9 100644 --- a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx +++ b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx @@ -1,24 +1,25 @@ -import { useBackend, useLocalState } from '../backend'; -import { - InfinitePlane, - Stack, - Box, - Button, - Modal, - Dropdown, - Section, - LabeledList, - Tooltip, - Slider, -} from '../components'; import { sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { classes, shallowDiffers } from 'common/react'; import { Component, createRef, RefObject } from 'react'; -import { Window } from '../layouts'; + import { resolveAsset } from '../assets'; -import { MOUSE_BUTTON_LEFT, noop } from './IntegratedCircuit/constants'; +import { useBackend, useLocalState } from '../backend'; +import { + Box, + Button, + Dropdown, + InfinitePlane, + LabeledList, + Modal, + Section, + Slider, + Stack, + Tooltip, +} from '../components'; +import { Window } from '../layouts'; import { Connection, Connections, Position } from './common/Connections'; +import { MOUSE_BUTTON_LEFT, noop } from './IntegratedCircuit/constants'; enum ConnectionType { Relay, diff --git a/tgui/packages/tgui/interfaces/PlayerTicketHistory.tsx b/tgui/packages/tgui/interfaces/PlayerTicketHistory.tsx index 4501c571b9c..3de96fdc84b 100644 --- a/tgui/packages/tgui/interfaces/PlayerTicketHistory.tsx +++ b/tgui/packages/tgui/interfaces/PlayerTicketHistory.tsx @@ -1,13 +1,13 @@ import { useBackend, useLocalState } from '../backend'; import { - NoticeBox, - Section, - Tabs, - Input, Button, - NumberInput, - Stack, Collapsible, + Input, + NoticeBox, + NumberInput, + Section, + Stack, + Tabs, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/PortableChemMixer.tsx b/tgui/packages/tgui/interfaces/PortableChemMixer.tsx index 9dca30da61b..7af626a20ab 100644 --- a/tgui/packages/tgui/interfaces/PortableChemMixer.tsx +++ b/tgui/packages/tgui/interfaces/PortableChemMixer.tsx @@ -1,8 +1,9 @@ import { sortBy } from 'common/collections'; -import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; + import { useBackend } from '../backend'; import { Box, Button, Section } from '../components'; import { Window } from '../layouts'; +import { Beaker, BeakerDisplay } from './common/BeakerDisplay'; type DispensableReagent = { title: string; diff --git a/tgui/packages/tgui/interfaces/PortableScrubber.tsx b/tgui/packages/tgui/interfaces/PortableScrubber.tsx index 983e852b2cd..72e5153c803 100644 --- a/tgui/packages/tgui/interfaces/PortableScrubber.tsx +++ b/tgui/packages/tgui/interfaces/PortableScrubber.tsx @@ -1,10 +1,10 @@ -import { Button, Section } from '../components'; - import { BooleanLike } from 'common/react'; -import { PortableBasicInfo } from './common/PortableAtmos'; -import { Window } from '../layouts'; -import { getGasLabel } from '../constants'; + import { useBackend } from '../backend'; +import { Button, Section } from '../components'; +import { getGasLabel } from '../constants'; +import { Window } from '../layouts'; +import { PortableBasicInfo } from './common/PortableAtmos'; type Data = { filterTypes: Filter[]; diff --git a/tgui/packages/tgui/interfaces/PortraitPicker.jsx b/tgui/packages/tgui/interfaces/PortraitPicker.jsx index d0dc041f307..18997c67fb1 100644 --- a/tgui/packages/tgui/interfaces/PortraitPicker.jsx +++ b/tgui/packages/tgui/interfaces/PortraitPicker.jsx @@ -1,8 +1,9 @@ +import { useState } from 'react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; -import { Button, Flex, NoticeBox, Section, Input } from '../components'; +import { Button, Flex, Input, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; export const PortraitPicker = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.jsx b/tgui/packages/tgui/interfaces/PowerMonitor.jsx index 497caa850be..6e0e0dca173 100644 --- a/tgui/packages/tgui/interfaces/PowerMonitor.jsx +++ b/tgui/packages/tgui/interfaces/PowerMonitor.jsx @@ -1,23 +1,24 @@ import { map, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { toFixed } from 'common/math'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, Chart, ColorBox, + Dimmer, Flex, Icon, LabeledList, ProgressBar, Section, - Table, - Dimmer, Stack, + Table, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; const PEAK_DRAW = 500000; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx index e5ead1b909b..99dd1bb2fc1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/AntagsPage.tsx @@ -1,5 +1,6 @@ import { binaryInsertWith } from 'common/collections'; import { classes } from 'common/react'; + import { useBackend, useLocalState } from '../../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx index ccccd333e74..a8a623498bf 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx @@ -1,18 +1,20 @@ import { exhaustiveCheck } from 'common/exhaustive'; + import { useBackend, useLocalState } from '../../backend'; -import { Stack, Dropdown, Flex } from '../../components'; +import { Dropdown, Flex, Stack } from '../../components'; // SKYRAT EDIT CHANGE - ORIGINAL: import { Button, Stack } from '../../components'; import { Window } from '../../layouts'; -import { PreferencesMenuData } from './data'; -import { PageButton } from './PageButton'; import { AntagsPage } from './AntagsPage'; +import { PreferencesMenuData } from './data'; import { JobsPage } from './JobsPage'; -import { MainPage } from './MainPage'; -import { SpeciesPage } from './SpeciesPage'; -import { QuirksPage } from './QuirksPage'; // SKYRAT EDIT import { LanguagesPage } from './LanguagesMenu'; import { LimbsPage } from './LimbsPage'; // SKYRAT EDIT END +import { MainPage } from './MainPage'; +import { PageButton } from './PageButton'; +import { QuirksPage } from './QuirksPage'; +import { SpeciesPage } from './SpeciesPage'; + enum Page { Antags, Main, @@ -33,9 +35,9 @@ const CharacterProfiles = (props: { const { profiles, activeSlot, onClick } = props; // SKYRAT EDIT CHANGE return ( - { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx index a4e3dd1430b..1fd5bc42dab 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx @@ -1,15 +1,15 @@ // THIS IS A SKYRAT UI FILE +import { useBackend } from '../../backend'; import { Box, - Stack, - Section, - Dropdown, Button, ColorBox, + Dropdown, + Section, + Stack, } from '../../components'; -import { useBackend } from '../../backend'; -import { PreferencesMenuData } from './data'; import { CharacterPreview } from '../common/CharacterPreview'; +import { PreferencesMenuData } from './data'; export const RotateCharacterButtons = (props) => { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx index 8ce27f513b5..1789cb29be2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx @@ -1,33 +1,34 @@ +import { filterMap, sortBy } from 'common/collections'; import { classes } from 'common/react'; + import { sendAct, useBackend, useLocalState } from '../../backend'; import { Autofocus, Box, Button, + Dropdown, // SKYRAT EDIT ADDITION Flex, LabeledList, Popper, Stack, TrackOutsideClicks, - Dropdown, // SKYRAT EDIT ADDITION } from '../../components'; +import { CharacterPreview } from '../common/CharacterPreview'; import { createSetPreference, PreferencesMenuData, RandomSetting, ServerData, } from './data'; -import { CharacterPreview } from '../common/CharacterPreview'; -import { RandomizationButton } from './RandomizationButton'; -import { ServerPreferencesFetcher } from './ServerPreferencesFetcher'; import { MultiNameInput, NameInput } from './names'; -import { Gender, GENDERS } from './preferences/gender'; import features from './preferences/features'; import { FeatureChoicedServerData, FeatureValueInput, } from './preferences/features/base'; -import { filterMap, sortBy } from 'common/collections'; +import { Gender, GENDERS } from './preferences/gender'; +import { RandomizationButton } from './RandomizationButton'; +import { ServerPreferencesFetcher } from './ServerPreferencesFetcher'; import { useRandomToggleState } from './useRandomToggleState'; const CLOTHING_CELL_SIZE = 48; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx index 36bc8e9767e..a8964b23a01 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/PageButton.tsx @@ -1,4 +1,5 @@ import { ReactNode } from 'react'; + import { Button } from '../../components'; export const PageButton =

(props: { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx index 61199cb65ad..ad0fc14e3d2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx @@ -1,9 +1,10 @@ +import { filterMap } from 'common/collections'; + +import { useBackend, useLocalState } from '../../backend'; import { Box, Button, Icon, Popper, Stack, Tooltip } from '../../components'; import { PreferencesMenuData, Quirk, RandomSetting, ServerData } from './data'; -import { useBackend, useLocalState } from '../../backend'; -import { ServerPreferencesFetcher } from './ServerPreferencesFetcher'; -import { filterMap } from 'common/collections'; import { getRandomization, PreferenceList } from './MainPage'; +import { ServerPreferencesFetcher } from './ServerPreferencesFetcher'; import { useRandomToggleState } from './useRandomToggleState'; const getValueClass = (value: number): string => { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx index 9bd735fc4db..04f3b25734a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx @@ -1,6 +1,7 @@ +import { exhaustiveCheck } from 'common/exhaustive'; + import { Dropdown, Icon } from '../../components'; import { RandomSetting } from './data'; -import { exhaustiveCheck } from 'common/exhaustive'; export const RandomizationButton = (props: { dropdownProps?: Record; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/ServerPreferencesFetcher.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/ServerPreferencesFetcher.tsx index fcbe342af61..0b90fd855c7 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/ServerPreferencesFetcher.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/ServerPreferencesFetcher.tsx @@ -1,4 +1,5 @@ import { Component, ReactNode } from 'react'; + import { resolveAsset } from '../../assets'; import { fetchRetry } from '../../http'; import { ServerData } from './data'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx index 3138a468c18..dfb56213d64 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx @@ -1,4 +1,5 @@ import { classes } from 'common/react'; + import { useBackend } from '../../backend'; import { BlockQuote, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx index 38f97d8e3dd..13c572ebc84 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/TabbedMenu.tsx @@ -1,4 +1,5 @@ import { Component, createRef, ReactNode, RefObject } from 'react'; + import { Button, Section, Stack } from '../../components'; import { FlexProps } from '../../components/Flex'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts index 58db32a372d..cc77194f0cb 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Abductor: Antagonist = { key: 'abductor', name: 'Abductor', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx similarity index 96% rename from tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.ts rename to tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx index 89a453a35b4..e1ffd36c86e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx @@ -1,6 +1,8 @@ -import { Antagonist, Category } from '../base'; +// THIS IS A SKYRAT UI FILE import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const OPERATIVE_MECHANICAL_DESCRIPTION = multiline` Attain all possible GoldenEye authentication keys and use them to activate the GoldenEye. These keys use mindfragments of Nanotrasen heads to generate diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts index c562e4e5ee5..99861d530ca 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const BLOB_MECHANICAL_DESCRIPTION = multiline` The blob infests the station and destroys everything in its path, including hull, fixtures, and creatures. Spread your mass, collect resources, and diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts index 3cddceb3c3d..33bc8405d49 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts @@ -1,6 +1,7 @@ +import { multiline } from 'common/string'; + import { Antagonist, Category } from '../base'; import { BLOB_MECHANICAL_DESCRIPTION } from './blob'; -import { multiline } from 'common/string'; const BlobInfection: Antagonist = { key: 'blobinfection', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts index 8d4d45f582f..176cd39a7ea 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const BloodBrother: Antagonist = { key: 'bloodbrother', name: 'Blood Brother', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts index d21aff20ee6..2c9698d0bda 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const CHANGELING_MECHANICAL_DESCRIPTION = 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/changelingmidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts index 733b9cdda3f..90692d28243 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { CHANGELING_MECHANICAL_DESCRIPTION } from './changeling'; const ChangelingMidround: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts index bcb16a8d95a..f32c6c6d3b0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; const ClownOperative: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts index a3bb8172142..252f7e65b63 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Cultist: Antagonist = { key: 'cultist', name: 'Cultist', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts index 9c73d38b31b..fa82436bb19 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts @@ -1,4 +1,6 @@ +// THIS IS A SKYRAT UI FILE import { multiline } from 'common/string'; + import { Antagonist, Category } from '../base'; export const CONTRACTOR_MECHANICAL_DESCRIPTION = multiline` diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx new file mode 100644 index 00000000000..fa82436bb19 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx @@ -0,0 +1,22 @@ +// THIS IS A SKYRAT UI FILE +import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; + +export const CONTRACTOR_MECHANICAL_DESCRIPTION = multiline` + Float onto the station and complete as many + contracts for your employer as you can! + `; + +const DriftingContractor: Antagonist = { + key: 'driftingcontractor', + name: 'Drifting Contractor', + description: [ + multiline`A Syndicate agent that can spawn near the station, equipped with + top-of-the-line contractor gear, to complete contracts for the Syndicate.`, + CONTRACTOR_MECHANICAL_DESCRIPTION, + ], + category: Category.Midround, +}; + +export default DriftingContractor; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts index 0516788543f..1d7158484a1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Fugitive: Antagonist = { key: 'fugitive', name: 'Fugitive', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts index 89c7d19a2c2..227ad99b02d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Glitch: Antagonist = { key: 'glitch', name: 'Glitch', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts index fd2081fe49e..7ef4908368a 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = multiline` 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 b8daffc0b64..7d378e6c850 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const HERETIC_MECHANICAL_DESCRIPTION = multiline` Find hidden influences and sacrifice crew members to gain magical powers and ascend as one of several paths. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts index d294c457383..b5ba561212b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts @@ -1,4 +1,6 @@ +// THIS IS A SKYRAT UI FILE import { multiline } from 'common/string'; + import { Antagonist, Category } from '../base'; const LoneInfiltrator: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx new file mode 100644 index 00000000000..b5ba561212b --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx @@ -0,0 +1,17 @@ +// THIS IS A SKYRAT UI FILE +import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; + +const LoneInfiltrator: Antagonist = { + key: 'loneinfiltrator', + name: 'Lone Infiltrator', + description: [ + multiline`A midround traitor that can spawn near the station, equipped with + a Syndicate Modsuit and equipment befitting a station boarder. + Float onto the station and complete your objectives.`, + ], + category: Category.Midround, +}; + +export default LoneInfiltrator; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts index c74b2ca01b4..b9330e41547 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; const LoneOperative: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts index 1aa9e0034bb..614e97447f7 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const MALF_AI_MECHANICAL_DESCRIPTION = multiline` With a law zero to complete your objectives at all costs, combine your omnipotence and malfunction modules to wreak havoc across the station. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts index d686a78af49..9b0cd861f13 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts @@ -1,4 +1,5 @@ import { multiline } from 'common/string'; + import { Antagonist, Category } from '../base'; import { MALF_AI_MECHANICAL_DESCRIPTION } from './malfai'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts index b66f03f2b2c..4f317ff0b48 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Nightmare: Antagonist = { key: 'nightmare', name: 'Nightmare', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts index fcb18419a81..9e38e37cfe1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Obsessed: Antagonist = { key: 'obsessed', name: 'Obsessed', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts index a8b14e88fce..2b179a2bd67 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const OPERATIVE_MECHANICAL_DESCRIPTION = multiline` Retrieve the nuclear authentication disk, use it to activate the nuclear fission explosive, and destroy the station. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts index cd4e0e94858..cf79eae9bdc 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { OPERATIVE_MECHANICAL_DESCRIPTION } from './operative'; const OperativeMidround: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts index b0f5091bfbe..9217c3aeb13 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const ParadoxClone: Antagonist = { key: 'paradoxclone', name: 'Paradox Clone', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts index b8b847da11d..cd8ef1a380f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { REVOLUTIONARY_MECHANICAL_DESCRIPTION } from './headrevolutionary'; const Provocateur: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts index a23b4e178c8..e9fdf3c178d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Revenant: Antagonist = { key: 'revenant', name: 'Revenant', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts index 247b88aed0d..6b4cad30e18 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const SentientCreature: Antagonist = { key: 'sentiencepotionspawn', name: 'Sentient Creature', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts index fabe1d34e5f..f2b2be6ca78 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const SentientDisease: Antagonist = { key: 'sentientdisease', name: 'Sentient Disease', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts index e3e8940dda9..79e55a0060d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const SpaceDragon: Antagonist = { key: 'spacedragon', name: 'Space Dragon', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts index 18ce064b373..aee97dbdd23 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const SpaceNinja: Antagonist = { key: 'spaceninja', name: 'Space Ninja', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts index 8d1191c2b2b..59049ca39fe 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts @@ -1,5 +1,6 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; + +import { Antagonist, Category } from '../base'; import { CHANGELING_MECHANICAL_DESCRIPTION } from './changeling'; const Stowaway_Changeling: Antagonist = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts index a692736c408..cce7f70ea6f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts @@ -1,6 +1,7 @@ +import { multiline } from 'common/string'; + import { Antagonist, Category } from '../base'; import { TRAITOR_MECHANICAL_DESCRIPTION } from './traitor'; -import { multiline } from 'common/string'; const SyndicateSleeperAgent: Antagonist = { key: 'syndicatesleeperagent', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts index 86f4089277a..b815039cbb6 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const TRAITOR_MECHANICAL_DESCRIPTION = multiline` Start with an uplink to purchase your gear and take on your sinister objectives. Ascend through the ranks and become an infamous legend. diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts index 9c8f5dc84c7..67118697da0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + export const WIZARD_MECHANICAL_DESCRIPTION = multiline` 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 6bea64450e9..c7596969264 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts @@ -1,6 +1,7 @@ -import { Antagonist, Category } from '../base'; import { multiline } from 'common/string'; +import { Antagonist, Category } from '../base'; + const Xenomorph: Antagonist = { key: 'xenomorph', name: 'Xenomorph', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts index 95163a4e40c..d3570464af2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { sendAct } from '../../backend'; import { Gender } from './preferences/gender'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/index.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/index.tsx index cacfd3c9578..0f8aefcecf9 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/index.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/index.tsx @@ -1,11 +1,12 @@ import { exhaustiveCheck } from 'common/exhaustive'; + import { useBackend } from '../../backend'; +import { CharacterPreferenceWindow } from './CharacterPreferenceWindow'; import { GamePreferencesSelectedPage, PreferencesMenuData, Window, } from './data'; -import { CharacterPreferenceWindow } from './CharacterPreferenceWindow'; import { GamePreferenceWindow } from './GamePreferenceWindow'; export const PreferencesMenu = (props) => { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx index c6475763eaa..55fe73c594f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/names.tsx @@ -1,4 +1,5 @@ import { binaryInsertWith, sortBy } from 'common/collections'; + import { useLocalState } from '../../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skin_tone.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skin_tone.tsx index b45c436c3ab..fe18a89418d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skin_tone.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skin_tone.tsx @@ -1,4 +1,5 @@ import { sortBy } from 'common/collections'; + import { Box, Stack } from '../../../../../components'; import { Feature, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx index 1be18a9682e..15f7738be03 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx @@ -1,5 +1,5 @@ // THIS IS A SKYRAT UI FILE -import { Feature, CheckboxInput, FeatureNumberInput } from '../../base'; +import { CheckboxInput, Feature, FeatureNumberInput } from '../../base'; export const dc_starting_degradation: Feature = { name: 'A_Starting Degradation', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx index 0d02cc508b6..2a387eea994 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx @@ -1,16 +1,16 @@ // THIS IS A SKYRAT UI FILE import { - FeatureDropdownInput, - Feature, - FeatureNumberInput, CheckboxInput, - FeatureTriColorInput, - FeatureTriBoolInput, + Feature, + FeatureChoiced, + FeatureChoicedServerData, + FeatureDropdownInput, + FeatureNumberInput, FeatureNumeric, FeatureToggle, - FeatureChoiced, + FeatureTriBoolInput, + FeatureTriColorInput, FeatureValueProps, - FeatureChoicedServerData, } from '../../base'; export const feature_penis: Feature = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx index bc744b11550..8b4bc190161 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx @@ -1,18 +1,18 @@ // THIS IS A SKYRAT UI FILE import { - FeatureChoiced, - FeatureDropdownInput, - Feature, - FeatureColorInput, - FeatureTextInput, - FeatureShortTextInput, CheckboxInput, - FeatureTriColorInput, - FeatureTriBoolInput, - FeatureToggle, - FeatureNumberInput, - FeatureValueProps, + Feature, + FeatureChoiced, FeatureChoicedServerData, + FeatureColorInput, + FeatureDropdownInput, + FeatureNumberInput, + FeatureShortTextInput, + FeatureTextInput, + FeatureToggle, + FeatureTriBoolInput, + FeatureTriColorInput, + FeatureValueProps, } from '../../base'; export const feature_leg_type: FeatureChoiced = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tts_voice.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tts_voice.tsx index a1f47300573..94a208158c5 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tts_voice.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tts_voice.tsx @@ -1,12 +1,12 @@ +import { Button, Stack } from '../../../../../components'; import { FeatureChoiced, FeatureChoicedServerData, FeatureDropdownInput, - FeatureValueProps, FeatureNumeric, FeatureSliderInput, + FeatureValueProps, } from '../base'; -import { Stack, Button } from '../../../../../components'; const FeatureTTSDropdownInput = ( props: FeatureValueProps, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx index 4fc3d7f05c0..03244e9f6ee 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx @@ -1,11 +1,12 @@ +import { multiline } from 'common/string'; + import { CheckboxInput, - FeatureColorInput, Feature, + FeatureColorInput, FeatureDropdownInput, FeatureToggle, } from '../base'; -import { multiline } from 'common/string'; export const asaycolor: Feature = { name: 'Admin chat color', 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 f8252412fc9..de2ad66bd99 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,4 +1,5 @@ import { multiline } from 'common/string'; + import { CheckboxInput, FeatureToggle } from '../base'; export const broadcast_login_logout: FeatureToggle = { 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 0703c7ef04c..a60c6d9d31c 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,4 +1,5 @@ import { multiline } from 'common/string'; + import { CheckboxInput, FeatureToggle } from '../base'; export const darkened_flash: FeatureToggle = { 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 c335b1128e2..cfa323dce2c 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,11 @@ +import { binaryInsertWith } from 'common/collections'; +import { classes } from 'common/react'; import { multiline } from 'common/string'; +import { ReactNode } from 'react'; + +import { useBackend } from '../../../../../backend'; +import { Box, Dropdown, Flex } from '../../../../../components'; +import { PreferencesMenuData } from '../../../data'; import { CheckboxInput, FeatureChoiced, @@ -7,12 +14,6 @@ import { FeatureToggle, FeatureValueProps, } from '../base'; -import { Box, Dropdown, Flex } from '../../../../../components'; -import { classes } from 'common/react'; -import { ReactNode } from 'react'; -import { binaryInsertWith } from 'common/collections'; -import { useBackend } from '../../../../../backend'; -import { PreferencesMenuData } from '../../../data'; export const ghost_accs: FeatureChoiced = { name: 'Ghost accessories', 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 58b1a5b9914..5dd251c9cd0 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,5 +1,6 @@ import { multiline } from 'common/string'; -import { FeatureToggle, CheckboxInput } from '../base'; + +import { CheckboxInput, FeatureToggle } from '../base'; export const chat_bankcard: FeatureToggle = { name: 'Enable income updates', 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 e94eb6c522a..fdc3c62d2f3 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,5 +1,6 @@ import { multiline } from 'common/string'; -import { FeatureToggle, CheckboxInput, CheckboxInputInverse } from '../base'; + +import { CheckboxInput, CheckboxInputInverse, FeatureToggle } from '../base'; export const admin_ignore_cult_ghost: FeatureToggle = { name: 'Prevent being summoned as a cult ghost', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx index 3e0421de712..fe551cce2f7 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx @@ -1,4 +1,4 @@ -import { FeatureColorInput, Feature } from '../base'; +import { Feature, FeatureColorInput } from '../base'; export const ooccolor: Feature = { name: 'OOC color', 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 8d3c8b17426..1a1755ce714 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,4 +1,5 @@ import { multiline } from 'common/string'; + import { Feature, FeatureDropdownInput } from '../base'; export const preferred_map: Feature = { 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 3601b1b0c4e..5c65c4f100a 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,11 +1,12 @@ import { multiline } from 'common/string'; + import { CheckboxInput, - FeatureColorInput, - FeatureToggle, Feature, FeatureChoiced, + FeatureColorInput, FeatureDropdownInput, + FeatureToggle, } from '../base'; export const screentip_color: Feature = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx index b393b825a0b..de3ddfbd2a7 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx @@ -1,5 +1,5 @@ // THIS IS A SKYRAT UI FILE -import { FeatureToggle, CheckboxInput } from '../../base'; +import { CheckboxInput, FeatureToggle } from '../../base'; export const auto_dementor_pref: FeatureToggle = { name: 'Auto dementor', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx index 35715adbe61..a737e62e10d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx @@ -1,8 +1,8 @@ // THIS IS A SKYRAT UI FILE import { CheckboxInput, - FeatureDropdownInput, FeatureChoiced, + FeatureDropdownInput, FeatureToggle, } from '../../base'; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx index 099bbd2fbfe..fc90bf483f1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx @@ -1,5 +1,6 @@ // THIS IS A SKYRAT UI FILE import { multiline } from 'common/string'; + import { CheckboxInput, FeatureToggle } from '../../base'; export const face_cursor_combat_mode: FeatureToggle = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx index d6bd9c576dc..55e07f0e10d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx @@ -1,5 +1,5 @@ // THIS IS A SKYRAT UI FILE -import { FeatureToggle, CheckboxInput } from '../../base'; +import { CheckboxInput, FeatureToggle } from '../../base'; export const ticket_ping_pref: FeatureToggle = { name: 'Ticket ping', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index 537ccb230b6..0bce5e0982e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -1,11 +1,12 @@ import { multiline } from 'common/string'; + import { CheckboxInput, + Feature, FeatureChoiced, FeatureDropdownInput, - FeatureToggle, - Feature, FeatureSliderInput, + FeatureToggle, } from '../base'; export const sound_ambience: FeatureToggle = { 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 34d66864259..d3df346a83f 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,5 @@ import { multiline } from 'common/string'; + import { CheckboxInput, Feature, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx index fa133c4abc2..218b5b3c580 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx @@ -1,11 +1,12 @@ import { classes } from 'common/react'; + +import { Box, Dropdown, Stack } from '../../../../../components'; import { FeatureChoiced, FeatureChoicedServerData, FeatureValueProps, sortChoices, } from '../base'; -import { Box, Dropdown, Stack } from '../../../../../components'; const UIStyleInput = ( props: FeatureValueProps, 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 c4b7b6c2768..510bfc7ae2c 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,4 +1,5 @@ import { multiline } from 'common/string'; + import { CheckboxInput, FeatureToggle } from '../base'; export const windowflashing: FeatureToggle = { diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx index a30821ca7ee..f3c931325fc 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx @@ -1,10 +1,10 @@ import { - FeatureColorInput, Feature, FeatureChoiced, + FeatureChoicedServerData, + FeatureColorInput, FeatureDropdownInput, FeatureValueProps, - FeatureChoicedServerData, } from './base'; export const eye_color: Feature = { diff --git a/tgui/packages/tgui/interfaces/PrisonerManagement.tsx b/tgui/packages/tgui/interfaces/PrisonerManagement.tsx index 73c7ceadc93..ee2fcc88ee0 100644 --- a/tgui/packages/tgui/interfaces/PrisonerManagement.tsx +++ b/tgui/packages/tgui/interfaces/PrisonerManagement.tsx @@ -1,5 +1,6 @@ -import { useBackend, useSharedState } from '../backend'; import { BooleanLike } from 'common/react'; + +import { useBackend, useSharedState } from '../backend'; import { Box, Button, diff --git a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx index b3414cd942f..2da9fdf2104 100644 --- a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx +++ b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx @@ -1,12 +1,13 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { - Stack, - Section, - Input, Button, Dropdown, + Input, NoticeBox, + Section, + Stack, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ProduceConsole.tsx b/tgui/packages/tgui/interfaces/ProduceConsole.tsx index 49775ab1f88..51b7809db6f 100644 --- a/tgui/packages/tgui/interfaces/ProduceConsole.tsx +++ b/tgui/packages/tgui/interfaces/ProduceConsole.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; import { capitalize, createSearch } from 'common/string'; import { useState } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, @@ -8,10 +9,10 @@ import { Dimmer, Divider, Icon, + Image, Input, NumberInput, Section, - Image, Stack, Tabs, } from '../components'; diff --git a/tgui/packages/tgui/interfaces/QuantumConsole.tsx b/tgui/packages/tgui/interfaces/QuantumConsole.tsx index f648e2cfd33..2563c2dfc9f 100644 --- a/tgui/packages/tgui/interfaces/QuantumConsole.tsx +++ b/tgui/packages/tgui/interfaces/QuantumConsole.tsx @@ -1,4 +1,5 @@ -import { Window } from '../layouts'; +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, @@ -11,9 +12,9 @@ import { Table, Tooltip, } from '../components'; -import { BooleanLike } from 'common/react'; -import { LoadingScreen } from './common/LoadingToolbox'; import { TableCell, TableRow } from '../components/Table'; +import { Window } from '../layouts'; +import { LoadingScreen } from './common/LoadingToolbox'; type Data = | { diff --git a/tgui/packages/tgui/interfaces/Radio.jsx b/tgui/packages/tgui/interfaces/Radio.jsx index e2e0c1b3ffd..a6a35739d43 100644 --- a/tgui/packages/tgui/interfaces/Radio.jsx +++ b/tgui/packages/tgui/interfaces/Radio.jsx @@ -1,5 +1,6 @@ import { map } from 'common/collections'; import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, NumberInput, Section } from '../components'; import { RADIO_CHANNELS } from '../constants'; diff --git a/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.jsx b/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.jsx index 3179a1f0542..2732d6d327d 100644 --- a/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.jsx +++ b/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Button, Box, NumberInput, Section, LabeledList } from '../components'; +import { Box, Button, LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; export const RadioactiveMicrolaser = (props) => { diff --git a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx index ece6bb57220..8f1ebd95126 100644 --- a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx +++ b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx @@ -1,11 +1,12 @@ -import { Window } from '../layouts'; import { BooleanLike, classes } from 'common/react'; import { capitalizeAll } from 'common/string'; -import { useBackend } from '../backend'; -import { LabeledList, Section, Button, Tabs, Stack, Box } from '../components'; -import { AirLockMainSection } from './AirlockElectronics'; import { useState } from 'react'; +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section, Stack, Tabs } from '../components'; +import { Window } from '../layouts'; +import { AirLockMainSection } from './AirlockElectronics'; + type Data = { matterLeft: number; silo_upgraded: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx index e2acbf36db0..37fb66ca28e 100644 --- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx +++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx @@ -2,6 +2,7 @@ import { BooleanLike, classes } from 'common/react'; import { multiline } from 'common/string'; import { capitalizeAll } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, @@ -10,8 +11,8 @@ import { LabeledList, Section, Stack, - Tabs, Table, + Tabs, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/RapidPlumbingDevice.tsx b/tgui/packages/tgui/interfaces/RapidPlumbingDevice.tsx index 52b1cc7f9ca..53e677cde0d 100644 --- a/tgui/packages/tgui/interfaces/RapidPlumbingDevice.tsx +++ b/tgui/packages/tgui/interfaces/RapidPlumbingDevice.tsx @@ -1,12 +1,13 @@ -import { useBackend } from '../backend'; -import { capitalizeAll } from 'common/string'; import { BooleanLike, classes } from 'common/react'; -import { Window } from '../layouts'; -import { Section, Tabs, Button, Stack, Box } from '../components'; -import { ColorItem, LayerSelect } from './RapidPipeDispenser'; -import { SiloItem, MatterItem } from './RapidConstructionDevice'; +import { capitalizeAll } from 'common/string'; import { useState } from 'react'; +import { useBackend } from '../backend'; +import { Box, Button, Section, Stack, Tabs } from '../components'; +import { Window } from '../layouts'; +import { MatterItem, SiloItem } from './RapidConstructionDevice'; +import { ColorItem, LayerSelect } from './RapidPipeDispenser'; + type Data = { silo_upgraded: BooleanLike; layer_icon: string; diff --git a/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx b/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx index 5a199ba020d..3e5d6d861b7 100644 --- a/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx +++ b/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx @@ -1,11 +1,12 @@ import { classes } from 'common/react'; import { capitalizeAll } from 'common/string'; -import { useBackend } from '../backend'; -import { Box, Button, Section, Tabs, Stack } from '../components'; -import { InfoSection } from './RapidConstructionDevice'; -import { Window } from '../layouts'; import { useState } from 'react'; +import { useBackend } from '../backend'; +import { Box, Button, Section, Stack, Tabs } from '../components'; +import { Window } from '../layouts'; +import { InfoSection } from './RapidConstructionDevice'; + type Data = { selected_icon: string; tile_dirs: string[]; diff --git a/tgui/packages/tgui/interfaces/RecordManifest.jsx b/tgui/packages/tgui/interfaces/RecordManifest.jsx index c8f0e41510c..2abc482513d 100644 --- a/tgui/packages/tgui/interfaces/RecordManifest.jsx +++ b/tgui/packages/tgui/interfaces/RecordManifest.jsx @@ -1,7 +1,8 @@ // THIS IS A SKYRAT UI FILE import { classes } from 'common/react'; + import { useBackend } from '../backend'; -import { Icon, Section, Table, Tooltip, Button } from '../components'; +import { Button, Icon, Section, Table, Tooltip } from '../components'; import { Window } from '../layouts'; const commandJobs = [ diff --git a/tgui/packages/tgui/interfaces/Reflector.tsx b/tgui/packages/tgui/interfaces/Reflector.tsx index 8f30a6b85b1..32f0dee38c5 100644 --- a/tgui/packages/tgui/interfaces/Reflector.tsx +++ b/tgui/packages/tgui/interfaces/Reflector.tsx @@ -2,11 +2,11 @@ import { useBackend } from '../backend'; import { Box, Button, - Stack, Icon, LabeledControls, - Section, NumberInput, + Section, + Stack, Table, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/RemoteRobotControl.jsx b/tgui/packages/tgui/interfaces/RemoteRobotControl.jsx index 872a12fe3f3..f613dc7b804 100644 --- a/tgui/packages/tgui/interfaces/RemoteRobotControl.jsx +++ b/tgui/packages/tgui/interfaces/RemoteRobotControl.jsx @@ -1,6 +1,7 @@ import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../backend'; -import { Box, Button, NoticeBox, Section, LabeledList } from '../components'; +import { Box, Button, LabeledList, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; export const RemoteRobotControl = (props) => { diff --git a/tgui/packages/tgui/interfaces/RequestManager.jsx b/tgui/packages/tgui/interfaces/RequestManager.jsx index e1d3eba4e39..d9eb4527e85 100644 --- a/tgui/packages/tgui/interfaces/RequestManager.jsx +++ b/tgui/packages/tgui/interfaces/RequestManager.jsx @@ -5,6 +5,7 @@ */ import { decodeHtmlEntities } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Button, Input, Section, Table } from '../components'; import { Popper } from '../components/Popper'; diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/MessageViewTab.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/MessageViewTab.tsx index 6e32c313e11..7d238abbc76 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/MessageViewTab.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/MessageViewTab.tsx @@ -1,3 +1,5 @@ +import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../../backend'; import { BlockQuote, @@ -7,7 +9,6 @@ import { Section, Stack, } from '../../components'; -import { decodeHtmlEntities } from 'common/string'; import { RequestMessage, RequestPriority, diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx index eb84384055b..5274fd2071c 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx @@ -1,5 +1,6 @@ -import { useBackend, useLocalState } from '../../backend'; import { sortStrings } from 'common/collections'; + +import { useBackend, useLocalState } from '../../backend'; import { Box, Button, @@ -8,7 +9,7 @@ import { Stack, TextArea, } from '../../components'; -import { RequestsData, RequestType, RequestPriority } from './types'; +import { RequestPriority, RequestsData, RequestType } from './types'; export const MessageWriteTab = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx index 297fb767979..8307fd5dc6b 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleHeader.tsx @@ -1,6 +1,6 @@ import { useBackend } from '../../backend'; import { Button, NoticeBox, Stack } from '../../components'; -import { RequestsData, RequestPriority } from './types'; +import { RequestPriority, RequestsData } from './types'; export const RequestsConsoleHeader = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleMainScreen.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleMainScreen.tsx index f3791baa915..0ab87aece93 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleMainScreen.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/RequestsConsoleMainScreen.tsx @@ -1,9 +1,9 @@ import { useBackend, useSharedState } from '../../backend'; import { Icon, Stack, Tabs } from '../../components'; -import { RequestsData, RequestTabs } from './types'; +import { AnnouncementTab } from './AnnouncementTab'; import { MessageViewTab } from './MessageViewTab'; import { MessageWriteTab } from './MessageWriteTab'; -import { AnnouncementTab } from './AnnouncementTab'; +import { RequestsData, RequestTabs } from './types'; export const RequestMainScreen = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/index.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/index.tsx index 080890b5150..6327d35bb7e 100644 --- a/tgui/packages/tgui/interfaces/RequestsConsole/index.tsx +++ b/tgui/packages/tgui/interfaces/RequestsConsole/index.tsx @@ -1,9 +1,9 @@ import { useBackend } from '../../backend'; import { Button, Stack } from '../../components'; import { Window } from '../../layouts'; -import { RequestsData } from './types'; import { RequestsConsoleHeader } from './RequestsConsoleHeader'; import { RequestMainScreen } from './RequestsConsoleMainScreen'; +import { RequestsData } from './types'; export const RequestsConsole = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Roulette.jsx b/tgui/packages/tgui/interfaces/Roulette.jsx index c1bcb2ef0c7..1579ad3ab34 100644 --- a/tgui/packages/tgui/interfaces/Roulette.jsx +++ b/tgui/packages/tgui/interfaces/Roulette.jsx @@ -1,8 +1,9 @@ import { classes } from 'common/react'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, Grid, NumberInput, Table } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; const getNumberColor = (number) => { const inRedOddRange = diff --git a/tgui/packages/tgui/interfaces/Safe.jsx b/tgui/packages/tgui/interfaces/Safe.jsx index 3a989a2960f..5a89f8ca94c 100644 --- a/tgui/packages/tgui/interfaces/Safe.jsx +++ b/tgui/packages/tgui/interfaces/Safe.jsx @@ -1,4 +1,5 @@ import { Fragment } from 'react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; import { Box, Button, Icon, Section, Image } from '../components'; diff --git a/tgui/packages/tgui/interfaces/SatelliteControl.tsx b/tgui/packages/tgui/interfaces/SatelliteControl.tsx index a9009b77efe..1bc7e6deec0 100644 --- a/tgui/packages/tgui/interfaces/SatelliteControl.tsx +++ b/tgui/packages/tgui/interfaces/SatelliteControl.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ScannerGate.jsx b/tgui/packages/tgui/interfaces/ScannerGate.jsx index 448fa81600a..5afbf30072a 100644 --- a/tgui/packages/tgui/interfaces/ScannerGate.jsx +++ b/tgui/packages/tgui/interfaces/ScannerGate.jsx @@ -1,7 +1,7 @@ import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section } from '../components'; -import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; import { Window } from '../layouts'; +import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; const DISEASE_THEASHOLD_LIST = [ 'Positive', diff --git a/tgui/packages/tgui/interfaces/Secrets.jsx b/tgui/packages/tgui/interfaces/Secrets.jsx index b37a6213c04..95d0189a1cc 100644 --- a/tgui/packages/tgui/interfaces/Secrets.jsx +++ b/tgui/packages/tgui/interfaces/Secrets.jsx @@ -1,4 +1,6 @@ import { toFixed } from 'common/math'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Button, @@ -10,7 +12,6 @@ import { Stack, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; const TAB2NAME = [ { diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx index 73c731d3a64..45b35d2c69b 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx @@ -1,6 +1,4 @@ -import { useLocalState, useBackend } from 'tgui/backend'; -import { SECURETAB, Crime, SecurityRecordsData } from './types'; -import { getSecurityRecord } from './helpers'; +import { useBackend, useLocalState } from 'tgui/backend'; import { BlockQuote, Box, @@ -18,6 +16,9 @@ import { Tooltip, } from 'tgui/components'; +import { getSecurityRecord } from './helpers'; +import { Crime, SECURETAB, SecurityRecordsData } from './types'; + /** Displays a list of crimes and allows to add new ones. */ export const CrimeWatcher = (props) => { const foundRecord = getSecurityRecord(); diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx index 95b840dc4ae..9b34f3396ba 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx @@ -1,11 +1,12 @@ import { useBackend, useLocalState } from 'tgui/backend'; -import { PRINTOUT, SecurityRecordsData } from './types'; import { Box, Button, Input, Section, Stack } from 'tgui/components'; + import { - getSecurityRecord, getDefaultPrintDescription, getDefaultPrintHeader, + getSecurityRecord, } from './helpers'; +import { PRINTOUT, SecurityRecordsData } from './types'; /** Handles printing posters and rapsheets */ export const RecordPrint = (props) => { diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx index dd313b1e4ec..df8e2a60743 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx @@ -2,19 +2,20 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; import { useBackend, useLocalState } from 'tgui/backend'; import { - Stack, - Input, - Section, - Tabs, - NoticeBox, Box, - Icon, Button, + Icon, + Input, + NoticeBox, + Section, + Stack, + Tabs, } from 'tgui/components'; + import { JOB2ICON } from '../common/JobToIcon'; import { CRIMESTATUS2COLOR } from './constants'; import { isRecordMatch } from './helpers'; -import { SecurityRecordsData, SecurityRecord } from './types'; +import { SecurityRecord, SecurityRecordsData } from './types'; /** Tabs on left, with search bar */ export const SecurityRecordTabs = (props) => { diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx index cd3df0af1f3..bc6d968d70e 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx @@ -9,12 +9,13 @@ import { Stack, Table, } from 'tgui/components'; + import { CharacterPreview } from '../common/CharacterPreview'; import { EditableText } from '../common/EditableText'; -import { CrimeWatcher } from './CrimeWatcher'; -import { RecordPrint } from './RecordPrint'; import { CRIMESTATUS2COLOR, CRIMESTATUS2DESC } from './constants'; +import { CrimeWatcher } from './CrimeWatcher'; import { getSecurityRecord } from './helpers'; +import { RecordPrint } from './RecordPrint'; import { SecurityRecordsData } from './types'; /** Views a selected record. */ diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/helpers.ts b/tgui/packages/tgui/interfaces/SecurityRecords/helpers.ts index 036e4d115eb..4636923239d 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/helpers.ts +++ b/tgui/packages/tgui/interfaces/SecurityRecords/helpers.ts @@ -1,5 +1,6 @@ import { useBackend, useLocalState } from 'tgui/backend'; -import { PRINTOUT, SecurityRecordsData, SecurityRecord } from './types'; + +import { PRINTOUT, SecurityRecord, SecurityRecordsData } from './types'; /** We need an active reference and this a pain to rewrite */ export const getSecurityRecord = () => { diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/index.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/index.tsx index 800397afe4f..e0eb6016ad8 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/index.tsx +++ b/tgui/packages/tgui/interfaces/SecurityRecords/index.tsx @@ -1,9 +1,10 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, Icon, NoticeBox, Stack } from 'tgui/components'; import { Window } from 'tgui/layouts'; -import { SecurityRecordsData } from './types'; -import { SecurityRecordView } from './RecordView'; + import { SecurityRecordTabs } from './RecordTabs'; +import { SecurityRecordView } from './RecordView'; +import { SecurityRecordsData } from './types'; export const SecurityRecords = (props) => { const { data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/SeedExtractor.tsx b/tgui/packages/tgui/interfaces/SeedExtractor.tsx index f403b7efad6..a7778087292 100644 --- a/tgui/packages/tgui/interfaces/SeedExtractor.tsx +++ b/tgui/packages/tgui/interfaces/SeedExtractor.tsx @@ -1,21 +1,22 @@ +import { sortBy } from 'common/collections'; +import { flow } from 'common/fp'; import { classes } from 'common/react'; import { createSearch } from 'common/string'; -import { flow } from 'common/fp'; -import { sortBy } from 'common/collections'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { - Input, - Tooltip, Box, - ProgressBar, Button, + Icon, + Input, + NoticeBox, + ProgressBar, Section, Table, - NoticeBox, - Icon, + Tooltip, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; type TraitData = { path: string; diff --git a/tgui/packages/tgui/interfaces/SelectEquipment.jsx b/tgui/packages/tgui/interfaces/SelectEquipment.jsx index ef726f609f9..f9fac18df56 100644 --- a/tgui/packages/tgui/interfaces/SelectEquipment.jsx +++ b/tgui/packages/tgui/interfaces/SelectEquipment.jsx @@ -1,6 +1,7 @@ import { filter, map, sortBy, uniq } from 'common/collections'; import { flow } from 'common/fp'; import { createSearch } from 'common/string'; + import { useBackend, useLocalState } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/SentienceFunBalloon.jsx b/tgui/packages/tgui/interfaces/SentienceFunBalloon.jsx index 8b68d44ce5d..bb7d1d56fbd 100644 --- a/tgui/packages/tgui/interfaces/SentienceFunBalloon.jsx +++ b/tgui/packages/tgui/interfaces/SentienceFunBalloon.jsx @@ -1,11 +1,11 @@ import { useBackend } from '../backend'; import { Button, + Input, + LabeledList, NumberInput, Section, Stack, - Input, - LabeledList, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ServerControl.tsx b/tgui/packages/tgui/interfaces/ServerControl.tsx index 2c1dcaaee8e..8b51cdf625e 100644 --- a/tgui/packages/tgui/interfaces/ServerControl.tsx +++ b/tgui/packages/tgui/interfaces/ServerControl.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Button, Collapsible, Section, Table, NoticeBox } from '../components'; +import { Button, Collapsible, NoticeBox, Section, Table } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/ServerControlPanel.jsx b/tgui/packages/tgui/interfaces/ServerControlPanel.jsx index e6d7860f83c..5e6d9c82f92 100644 --- a/tgui/packages/tgui/interfaces/ServerControlPanel.jsx +++ b/tgui/packages/tgui/interfaces/ServerControlPanel.jsx @@ -1,6 +1,6 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; -import { NoticeBox, Section, Button, LabeledList } from '../components'; +import { Button, LabeledList, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; export const MicrofusionGunControl = (props) => { diff --git a/tgui/packages/tgui/interfaces/ServerMonitor.jsx b/tgui/packages/tgui/interfaces/ServerMonitor.jsx index 74f445211ef..87cbd18f343 100644 --- a/tgui/packages/tgui/interfaces/ServerMonitor.jsx +++ b/tgui/packages/tgui/interfaces/ServerMonitor.jsx @@ -1,17 +1,18 @@ +import { useState } from 'react'; + import { useBackend } from '../backend'; import { + Button, + Divider, + Flex, + Input, + LabeledList, + NoticeBox, Section, Stack, - Input, - Button, Table, - LabeledList, - Flex, - Divider, - NoticeBox, } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; const PacketInfo = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx b/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx index 430ed79e35d..e64f47086cd 100644 --- a/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx +++ b/tgui/packages/tgui/interfaces/ShuttleManipulator.jsx @@ -1,8 +1,9 @@ import { map } from 'common/collections'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Button, Flex, LabeledList, Section, Table, Tabs } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; export const ShuttleManipulator = (props) => { const [tab, setTab] = useState(1); diff --git a/tgui/packages/tgui/interfaces/Signaler.tsx b/tgui/packages/tgui/interfaces/Signaler.tsx index 8383a8a28ee..15a486a62df 100644 --- a/tgui/packages/tgui/interfaces/Signaler.tsx +++ b/tgui/packages/tgui/interfaces/Signaler.tsx @@ -1,6 +1,7 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; -import { Button, Stack, NumberInput, Section } from '../components'; +import { Button, NumberInput, Section, Stack } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/Signalvib.jsx b/tgui/packages/tgui/interfaces/Signalvib.jsx index 3915931766c..192233cc40c 100644 --- a/tgui/packages/tgui/interfaces/Signalvib.jsx +++ b/tgui/packages/tgui/interfaces/Signalvib.jsx @@ -1,5 +1,6 @@ // THIS IS A SKYRAT UI FILE import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Button, LabeledList, NumberInput, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/SkillStation.jsx b/tgui/packages/tgui/interfaces/SkillStation.jsx index ce77d7b7b03..b26163bbaf8 100644 --- a/tgui/packages/tgui/interfaces/SkillStation.jsx +++ b/tgui/packages/tgui/interfaces/SkillStation.jsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/SlimeBodySwapper.jsx b/tgui/packages/tgui/interfaces/SlimeBodySwapper.jsx index 887e0cb8d1d..d5c97e05d37 100644 --- a/tgui/packages/tgui/interfaces/SlimeBodySwapper.jsx +++ b/tgui/packages/tgui/interfaces/SlimeBodySwapper.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Section, LabeledList, Button, Box } from '../components'; +import { Box, Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; const statusMap = { diff --git a/tgui/packages/tgui/interfaces/SmartVend.tsx b/tgui/packages/tgui/interfaces/SmartVend.tsx index 4b89b29fbcf..d71877d086c 100644 --- a/tgui/packages/tgui/interfaces/SmartVend.tsx +++ b/tgui/packages/tgui/interfaces/SmartVend.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, NoticeBox, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/SmokeMachine.tsx b/tgui/packages/tgui/interfaces/SmokeMachine.tsx index 6b96289c064..072a7546876 100644 --- a/tgui/packages/tgui/interfaces/SmokeMachine.tsx +++ b/tgui/packages/tgui/interfaces/SmokeMachine.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { AnimatedNumber, diff --git a/tgui/packages/tgui/interfaces/SolarControl.tsx b/tgui/packages/tgui/interfaces/SolarControl.tsx index 83016d4c0c4..f3cd5a324a7 100644 --- a/tgui/packages/tgui/interfaces/SolarControl.tsx +++ b/tgui/packages/tgui/interfaces/SolarControl.tsx @@ -1,17 +1,18 @@ import { BooleanLike } from 'common/react'; -import { formatPower } from '../format'; + import { useBackend } from '../backend'; import { Box, Button, + Chart, + Icon, LabeledList, NumberInput, ProgressBar, - Chart, Section, Stack, - Icon, } from '../components'; +import { formatPower } from '../format'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/Soulcatcher.jsx b/tgui/packages/tgui/interfaces/Soulcatcher.jsx index d5ce9f2fd8f..f797d5b2225 100644 --- a/tgui/packages/tgui/interfaces/Soulcatcher.jsx +++ b/tgui/packages/tgui/interfaces/Soulcatcher.jsx @@ -1,17 +1,17 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; -import { Window } from '../layouts'; import { BlockQuote, - Button, - Divider, - Section, Box, - Flex, + Button, Collapsible, + Divider, + Flex, LabeledList, ProgressBar, + Section, } from '../components'; +import { Window } from '../layouts'; export const Soulcatcher = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx b/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx index 3dce5aec758..d0b3e37780a 100644 --- a/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx +++ b/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx @@ -1,16 +1,16 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; -import { Window } from '../layouts'; import { BlockQuote, - Button, - Divider, Box, - Flex, + Button, Collapsible, + Divider, + Flex, LabeledList, Section, } from '../components'; +import { Window } from '../layouts'; export const SoulcatcherUser = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/SparringContract.tsx b/tgui/packages/tgui/interfaces/SparringContract.tsx index e0b47a5d6ae..ccaf2768a72 100644 --- a/tgui/packages/tgui/interfaces/SparringContract.tsx +++ b/tgui/packages/tgui/interfaces/SparringContract.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; import { multiline } from 'common/string'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { BlockQuote, Button, Dropdown, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Spellbook.tsx b/tgui/packages/tgui/interfaces/Spellbook.tsx index 47fe2f7ffd2..514471dc0d9 100644 --- a/tgui/packages/tgui/interfaces/Spellbook.tsx +++ b/tgui/packages/tgui/interfaces/Spellbook.tsx @@ -1,5 +1,7 @@ import { BooleanLike } from 'common/react'; import { multiline } from 'common/string'; +import { ReactNode } from 'react'; + import { useBackend, useLocalState } from '../backend'; import { Box, @@ -14,7 +16,6 @@ import { Stack, } from '../components'; import { Window } from '../layouts'; -import { ReactNode } from 'react'; enum SpellCategory { Offensive = 'Offensive', diff --git a/tgui/packages/tgui/interfaces/StackCrafting.tsx b/tgui/packages/tgui/interfaces/StackCrafting.tsx index ab7e109cd96..ddaa0986c78 100644 --- a/tgui/packages/tgui/interfaces/StackCrafting.tsx +++ b/tgui/packages/tgui/interfaces/StackCrafting.tsx @@ -1,19 +1,20 @@ -import { createSearch } from 'common/string'; import { filter, map, reduce, sortBy } from 'common/collections'; +import { flow } from 'common/fp'; +import { clamp } from 'common/math'; +import { createSearch } from 'common/string'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, + Collapsible, Input, NoticeBox, Section, - Collapsible, Table, } from '../components'; import { Window } from '../layouts'; -import { clamp } from 'common/math'; -import { flow } from 'common/fp'; -import { useState } from 'react'; type Recipe = { ref: unknown | null; diff --git a/tgui/packages/tgui/interfaces/StationAlertConsole.jsx b/tgui/packages/tgui/interfaces/StationAlertConsole.jsx index 0483065f530..f80a5826b06 100644 --- a/tgui/packages/tgui/interfaces/StationAlertConsole.jsx +++ b/tgui/packages/tgui/interfaces/StationAlertConsole.jsx @@ -1,5 +1,6 @@ import { sortBy } from 'common/collections'; import { flow } from 'common/fp'; + import { useBackend } from '../backend'; import { Button, Section, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx b/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx index d92254695db..f3176415a4f 100644 --- a/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx +++ b/tgui/packages/tgui/interfaces/StationTraitsPanel.tsx @@ -2,6 +2,7 @@ import { filterMap } from 'common/collections'; import { exhaustiveCheck } from 'common/exhaustive'; import { BooleanLike } from 'common/react'; import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, Divider, Dropdown, Stack, Tabs } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/StoryManager.tsx b/tgui/packages/tgui/interfaces/StoryManager.tsx index 56e7f7ef977..7486e83dc84 100644 --- a/tgui/packages/tgui/interfaces/StoryManager.tsx +++ b/tgui/packages/tgui/interfaces/StoryManager.tsx @@ -1,11 +1,11 @@ // THIS IS A SKYRAT UI FILE import { useBackend, useLocalState } from '../backend'; import { + Button, Collapsible, + LabeledList, Section, TextArea, - LabeledList, - Button, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx index e16cbce9af6..968ca8b1cc0 100644 --- a/tgui/packages/tgui/interfaces/StripMenu.tsx +++ b/tgui/packages/tgui/interfaces/StripMenu.tsx @@ -1,8 +1,9 @@ import { range } from 'common/collections'; import { BooleanLike } from 'common/react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; -import { Box, Button, Icon, Stack, Image } from '../components'; +import { Box, Button, Icon, Image, Stack } from '../components'; import { Window } from '../layouts'; const ROWS = 6; // SKYRAT EDIT CHANGE diff --git a/tgui/packages/tgui/interfaces/Supermatter.tsx b/tgui/packages/tgui/interfaces/Supermatter.tsx index 20e4f2ccb65..9bb8661ca29 100644 --- a/tgui/packages/tgui/interfaces/Supermatter.tsx +++ b/tgui/packages/tgui/interfaces/Supermatter.tsx @@ -3,6 +3,7 @@ import { flow } from 'common/fp'; import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; import { ReactNode, useState } from 'react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx index ec20862c41d..2e9403794bf 100644 --- a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx +++ b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx @@ -2,6 +2,7 @@ import { sortBy } from 'common/collections'; import { KEY_DOWN, KEY_ENTER, KEY_UP } from 'common/keycodes'; import { BooleanLike } from 'common/react'; 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 47ecacb5c97..472a1834df6 100644 --- a/tgui/packages/tgui/interfaces/SyndContractor.jsx +++ b/tgui/packages/tgui/interfaces/SyndContractor.jsx @@ -1,4 +1,5 @@ -import { FakeTerminal } from '../components/FakeTerminal'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, @@ -10,11 +11,11 @@ import { Modal, NoticeBox, Section, - Tabs, Table, + Tabs, } from '../components'; +import { FakeTerminal } from '../components/FakeTerminal'; import { NtosWindow } from '../layouts'; -import { useState } from 'react'; const CONTRACT_STATUS_INACTIVE = 1; const CONTRACT_STATUS_ACTIVE = 2; diff --git a/tgui/packages/tgui/interfaces/Tank.jsx b/tgui/packages/tgui/interfaces/Tank.jsx index 8710a94b74e..87c1d4e2221 100644 --- a/tgui/packages/tgui/interfaces/Tank.jsx +++ b/tgui/packages/tgui/interfaces/Tank.jsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { Button, diff --git a/tgui/packages/tgui/interfaces/TankCompressor.jsx b/tgui/packages/tgui/interfaces/TankCompressor.jsx index 6ac37ca800b..1fddb2b1938 100644 --- a/tgui/packages/tgui/interfaces/TankCompressor.jsx +++ b/tgui/packages/tgui/interfaces/TankCompressor.jsx @@ -4,14 +4,14 @@ import { Button, Flex, Icon, + LabeledList, Modal, + NoticeBox, RoundGauge, Section, Slider, Stack, - NoticeBox, Tabs, - LabeledList, } from '../components'; import { Window } from '../layouts'; import { GasmixParser } from './common/GasmixParser'; diff --git a/tgui/packages/tgui/interfaces/Techweb.jsx b/tgui/packages/tgui/interfaces/Techweb.jsx index 031b3ebc2ad..62381d5037b 100644 --- a/tgui/packages/tgui/interfaces/Techweb.jsx +++ b/tgui/packages/tgui/interfaces/Techweb.jsx @@ -1,19 +1,20 @@ import { map, sortBy } from 'common/collections'; + import { useBackend, useLocalState } from '../backend'; import { - Button, - Section, - Modal, - Tabs, Box, - Input, - Flex, - ProgressBar, + Button, Collapsible, - Icon, Divider, + Flex, + Icon, + Input, + Modal, + ProgressBar, + Section, + Tabs, } from '../components'; -import { Window, NtosWindow } from '../layouts'; +import { NtosWindow, Window } from '../layouts'; import { Experiment } from './ExperimentConfigure'; // Data reshaping / ingestion (thanks stylemistake for the help, very cool!) diff --git a/tgui/packages/tgui/interfaces/Telecomms.jsx b/tgui/packages/tgui/interfaces/Telecomms.jsx index 6ef6b902ed6..d0faebd0b9a 100644 --- a/tgui/packages/tgui/interfaces/Telecomms.jsx +++ b/tgui/packages/tgui/interfaces/Telecomms.jsx @@ -1,14 +1,14 @@ import { useBackend } from '../backend'; import { + Box, Button, Input, + LabeledControls, LabeledList, - Section, - Table, NoticeBox, NumberInput, - LabeledControls, - Box, + Section, + Table, } from '../components'; import { RADIO_CHANNELS } from '../constants'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TelecommsMonitor.tsx b/tgui/packages/tgui/interfaces/TelecommsMonitor.tsx index 619eb9d9801..8a1ecdd64d6 100644 --- a/tgui/packages/tgui/interfaces/TelecommsMonitor.tsx +++ b/tgui/packages/tgui/interfaces/TelecommsMonitor.tsx @@ -1,13 +1,14 @@ import { useState } from 'react'; + import { useBackend } from '../backend'; import { - Section, - Stack, - Input, Button, - Table, + Input, LabeledList, NoticeBox, + Section, + Stack, + Table, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TextInputModal.tsx b/tgui/packages/tgui/interfaces/TextInputModal.tsx index 63abe5f8413..f9ec036575e 100644 --- a/tgui/packages/tgui/interfaces/TextInputModal.tsx +++ b/tgui/packages/tgui/interfaces/TextInputModal.tsx @@ -1,10 +1,11 @@ -import { Loader } from './common/Loader'; -import { InputButtons } from './common/InputButtons'; +import { KEY } from 'common/keys'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Section, Stack, TextArea } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; -import { KEY } from 'common/keys'; +import { InputButtons } from './common/InputButtons'; +import { Loader } from './common/Loader'; type TextInputData = { large_buttons: boolean; diff --git a/tgui/packages/tgui/interfaces/ThermoMachine.jsx b/tgui/packages/tgui/interfaces/ThermoMachine.jsx index 419803b2059..cf5695b73b6 100644 --- a/tgui/packages/tgui/interfaces/ThermoMachine.jsx +++ b/tgui/packages/tgui/interfaces/ThermoMachine.jsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; + import { useBackend } from '../backend'; import { AnimatedNumber, diff --git a/tgui/packages/tgui/interfaces/Thermometer.jsx b/tgui/packages/tgui/interfaces/Thermometer.jsx index 85a5eb7c44a..19a97d65a2e 100644 --- a/tgui/packages/tgui/interfaces/Thermometer.jsx +++ b/tgui/packages/tgui/interfaces/Thermometer.jsx @@ -1,4 +1,5 @@ import { Component } from 'react'; + import { useBackend } from '../backend'; import { Box, Stack } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TimeClock.jsx b/tgui/packages/tgui/interfaces/TimeClock.jsx index dfd90b51968..dc8f0e8165b 100644 --- a/tgui/packages/tgui/interfaces/TimeClock.jsx +++ b/tgui/packages/tgui/interfaces/TimeClock.jsx @@ -1,7 +1,7 @@ // THIS IS A SKYRAT UI FILE import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; -import { Box, LabeledList, Section, Button } from '../components'; export const TimeClock = (props) => { const { act, data } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/Timer.tsx b/tgui/packages/tgui/interfaces/Timer.tsx index fcf4ccaad25..10cb76cb5de 100644 --- a/tgui/packages/tgui/interfaces/Timer.tsx +++ b/tgui/packages/tgui/interfaces/Timer.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx index f405e5b8623..3f1a3dcb543 100644 --- a/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx +++ b/tgui/packages/tgui/interfaces/TrackedPlaytime.jsx @@ -1,4 +1,5 @@ import { sortBy } from 'common/collections'; + import { useBackend } from '../backend'; import { Box, Button, Flex, ProgressBar, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TrainingMachine.tsx b/tgui/packages/tgui/interfaces/TrainingMachine.tsx index 804c2d4ed3e..1bf9a87dcc7 100644 --- a/tgui/packages/tgui/interfaces/TrainingMachine.tsx +++ b/tgui/packages/tgui/interfaces/TrainingMachine.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx index 4455c11fbb4..3b6b0103528 100644 --- a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx +++ b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx @@ -1,4 +1,5 @@ import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, LabeledList, Stack, Tabs, Tooltip } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TramControl.tsx b/tgui/packages/tgui/interfaces/TramControl.tsx index 5c10e85181f..74b93c61dec 100644 --- a/tgui/packages/tgui/interfaces/TramControl.tsx +++ b/tgui/packages/tgui/interfaces/TramControl.tsx @@ -1,8 +1,9 @@ +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + import { useBackend } from '../backend'; import { Box, Button, Dimmer, Icon, Section, Stack } from '../components'; import { Window } from '../layouts'; -import { useState } from 'react'; -import { BooleanLike } from 'common/react'; type Data = { broken: BooleanLike; diff --git a/tgui/packages/tgui/interfaces/TramController.tsx b/tgui/packages/tgui/interfaces/TramController.tsx index 536d01dd6e3..07fef58f8e4 100644 --- a/tgui/packages/tgui/interfaces/TramController.tsx +++ b/tgui/packages/tgui/interfaces/TramController.tsx @@ -1,15 +1,16 @@ -import { useBackend, useLocalState } from '../backend'; -import { BooleanLike } from 'common/react'; -import { - Stack, - Section, - LabeledList, - ProgressBar, - Button, - NoticeBox, - Dropdown, -} from '../components'; import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; + +import { useBackend, useLocalState } from '../backend'; +import { + Button, + Dropdown, + LabeledList, + NoticeBox, + ProgressBar, + Section, + Stack, +} from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/TramPlaque.tsx b/tgui/packages/tgui/interfaces/TramPlaque.tsx index 3da01d1f132..ebf03b0c4da 100644 --- a/tgui/packages/tgui/interfaces/TramPlaque.tsx +++ b/tgui/packages/tgui/interfaces/TramPlaque.tsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { NoticeBox, Section, LabeledList, Stack } from '../components'; +import { LabeledList, NoticeBox, Section, Stack } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/TrophyAdminPanel.jsx b/tgui/packages/tgui/interfaces/TrophyAdminPanel.jsx index 093c5edbc5b..885223b8a20 100644 --- a/tgui/packages/tgui/interfaces/TrophyAdminPanel.jsx +++ b/tgui/packages/tgui/interfaces/TrophyAdminPanel.jsx @@ -1,4 +1,5 @@ import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../backend'; import { Button, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Trophycase.jsx b/tgui/packages/tgui/interfaces/Trophycase.jsx index 12892adff51..7a664befb4d 100644 --- a/tgui/packages/tgui/interfaces/Trophycase.jsx +++ b/tgui/packages/tgui/interfaces/Trophycase.jsx @@ -1,13 +1,14 @@ import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../backend'; import { - Icon, Box, Button, Dimmer, + Icon, + Image, Section, Stack, - Image, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TurbineComputer.tsx b/tgui/packages/tgui/interfaces/TurbineComputer.tsx index b2a001338cd..f9e261f4932 100644 --- a/tgui/packages/tgui/interfaces/TurbineComputer.tsx +++ b/tgui/packages/tgui/interfaces/TurbineComputer.tsx @@ -1,13 +1,14 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { + Box, Button, LabeledList, - Section, - Box, Modal, - ProgressBar, NumberInput, + ProgressBar, + Section, } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/TurretControl.tsx b/tgui/packages/tgui/interfaces/TurretControl.tsx index dec3c72f203..2009ff4f742 100644 --- a/tgui/packages/tgui/interfaces/TurretControl.tsx +++ b/tgui/packages/tgui/interfaces/TurretControl.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Uplink/GenericUplink.tsx b/tgui/packages/tgui/interfaces/Uplink/GenericUplink.tsx index 8f06a03148e..d505f726e4d 100644 --- a/tgui/packages/tgui/interfaces/Uplink/GenericUplink.tsx +++ b/tgui/packages/tgui/interfaces/Uplink/GenericUplink.tsx @@ -1,13 +1,14 @@ import { BooleanLike } from 'common/react'; import { useState } from 'react'; + import { Box, Button, Input, - Section, - Tabs, NoticeBox, + Section, Stack, + Tabs, } from '../../components'; type GenericUplinkProps = { diff --git a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx index 81d803b3b82..e2eb714413c 100644 --- a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx +++ b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx @@ -1,15 +1,16 @@ import { BooleanLike, classes } from 'common/react'; import { Component } from 'react'; + import { - Section, - Stack, Box, Button, - Flex, - Tooltip, - NoticeBox, Dimmer, + Flex, Icon, + NoticeBox, + Section, + Stack, + Tooltip, } from '../../components'; import { calculateProgression, diff --git a/tgui/packages/tgui/interfaces/Uplink/index.tsx b/tgui/packages/tgui/interfaces/Uplink/index.tsx index 843963b4b7f..a8b2e7d477b 100644 --- a/tgui/packages/tgui/interfaces/Uplink/index.tsx +++ b/tgui/packages/tgui/interfaces/Uplink/index.tsx @@ -1,27 +1,28 @@ -import { useBackend } from '../../backend'; -import { Window } from '../../layouts'; -import { GenericUplink, Item } from './GenericUplink'; -import { Component, Fragment } from 'react'; -import { fetchRetry } from '../../http'; -import { resolveAsset } from '../../assets'; import { BooleanLike } from 'common/react'; +import { Component, Fragment } from 'react'; + +import { resolveAsset } from '../../assets'; +import { useBackend } from '../../backend'; import { Box, - Tabs, Button, - Stack, - Section, - Tooltip, Dimmer, + Section, + Stack, + Tabs, + Tooltip, } from '../../components'; -import { PrimaryObjectiveMenu } from './PrimaryObjectiveMenu'; -import { Objective, ObjectiveMenu } from './ObjectiveMenu'; +import { fetchRetry } from '../../http'; +import { Window } from '../../layouts'; import { - calculateProgression, calculateDangerLevel, + calculateProgression, dangerDefault, dangerLevelsTooltip, } from './calculateDangerLevel'; +import { GenericUplink, Item } from './GenericUplink'; +import { Objective, ObjectiveMenu } from './ObjectiveMenu'; +import { PrimaryObjectiveMenu } from './PrimaryObjectiveMenu'; type UplinkItem = { id: string; diff --git a/tgui/packages/tgui/interfaces/VaultController.tsx b/tgui/packages/tgui/interfaces/VaultController.tsx index 774483176c1..57a879bc096 100644 --- a/tgui/packages/tgui/interfaces/VaultController.tsx +++ b/tgui/packages/tgui/interfaces/VaultController.tsx @@ -1,5 +1,6 @@ import { toFixed } from 'common/math'; import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/Vendatray.tsx b/tgui/packages/tgui/interfaces/Vendatray.tsx index 9e1787f0e7c..ae8a4e07e7e 100644 --- a/tgui/packages/tgui/interfaces/Vendatray.tsx +++ b/tgui/packages/tgui/interfaces/Vendatray.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; -import { Box, Button, Section, Stack, Image } from '../components'; +import { Box, Button, Image, Section, Stack } from '../components'; import { Window } from '../layouts'; type Data = { diff --git a/tgui/packages/tgui/interfaces/VotePanel.tsx b/tgui/packages/tgui/interfaces/VotePanel.tsx index d9f1683b05a..a56f656a4a6 100644 --- a/tgui/packages/tgui/interfaces/VotePanel.tsx +++ b/tgui/packages/tgui/interfaces/VotePanel.tsx @@ -1,16 +1,17 @@ import { BooleanLike } from 'common/react'; + +import { useBackend } from '../backend'; import { Box, - Icon, - Stack, Button, - Section, - NoticeBox, - LabeledList, Collapsible, + Icon, + LabeledList, + NoticeBox, + Section, + Stack, } from '../components'; import { Window } from '../layouts'; -import { useBackend } from '../backend'; enum VoteConfig { None = -1, diff --git a/tgui/packages/tgui/interfaces/WarrantConsole.tsx b/tgui/packages/tgui/interfaces/WarrantConsole.tsx index 662e197bc36..245d7486c21 100644 --- a/tgui/packages/tgui/interfaces/WarrantConsole.tsx +++ b/tgui/packages/tgui/interfaces/WarrantConsole.tsx @@ -1,5 +1,6 @@ +import { sortBy } from 'common/collections'; + import { useBackend, useLocalState } from '../backend'; -import { Window } from '../layouts'; import { BlockQuote, Button, @@ -11,7 +12,7 @@ import { Stack, Tabs, } from '../components'; -import { sortBy } from 'common/collections'; +import { Window } from '../layouts'; type Data = { records: WarrantRecord[]; diff --git a/tgui/packages/tgui/interfaces/Wires.tsx b/tgui/packages/tgui/interfaces/Wires.tsx index 6f310f6e1da..19cfa76df5a 100644 --- a/tgui/packages/tgui/interfaces/Wires.tsx +++ b/tgui/packages/tgui/interfaces/Wires.tsx @@ -1,4 +1,5 @@ import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/common/AccessConfig.jsx b/tgui/packages/tgui/interfaces/common/AccessConfig.jsx index fb16d28b6e9..274ecf0f76a 100644 --- a/tgui/packages/tgui/interfaces/common/AccessConfig.jsx +++ b/tgui/packages/tgui/interfaces/common/AccessConfig.jsx @@ -1,6 +1,7 @@ import { sortBy } from 'common/collections'; -import { Section, Button, Flex, Tabs, Grid } from '../../components'; + import { useLocalState } from '../../backend'; +import { Button, Flex, Grid, Section, Tabs } from '../../components'; export const AccessConfig = (props) => { const { diff --git a/tgui/packages/tgui/interfaces/common/AccessList.jsx b/tgui/packages/tgui/interfaces/common/AccessList.jsx index 8f651618b6c..a4096b6ce30 100644 --- a/tgui/packages/tgui/interfaces/common/AccessList.jsx +++ b/tgui/packages/tgui/interfaces/common/AccessList.jsx @@ -1,4 +1,5 @@ import { sortBy } from 'common/collections'; + import { useSharedState } from '../../backend'; import { Button, Flex, Section, Tabs } from '../../components'; diff --git a/tgui/packages/tgui/interfaces/common/AtmosControls.tsx b/tgui/packages/tgui/interfaces/common/AtmosControls.tsx index a01d17fa405..4d126133526 100644 --- a/tgui/packages/tgui/interfaces/common/AtmosControls.tsx +++ b/tgui/packages/tgui/interfaces/common/AtmosControls.tsx @@ -1,5 +1,6 @@ import { BooleanLike } from 'common/react'; import { decodeHtmlEntities } from 'common/string'; + import { useBackend } from '../../backend'; import { Button, LabeledList, NumberInput, Section } from '../../components'; import { getGasLabel } from '../../constants'; diff --git a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx index bb2670829de..65bf5f839be 100644 --- a/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx +++ b/tgui/packages/tgui/interfaces/common/AtmosHandbook.tsx @@ -1,4 +1,5 @@ import { ReactNode } from 'react'; + import { useBackend, useLocalState } from '../../backend'; import { Box, diff --git a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx index 699c40fb134..dc5b045d7f7 100644 --- a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx +++ b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx @@ -1,6 +1,7 @@ import { BooleanLike } from 'common/react'; -import { AnimatedNumber, Box, Button, LabeledList } from '../../components'; + import { useBackend } from '../../backend'; +import { AnimatedNumber, Box, Button, LabeledList } from '../../components'; type BeakerReagent = { name: string; diff --git a/tgui/packages/tgui/interfaces/common/Connections.tsx b/tgui/packages/tgui/interfaces/common/Connections.tsx index f5f1abca119..e27b48d6735 100644 --- a/tgui/packages/tgui/interfaces/common/Connections.tsx +++ b/tgui/packages/tgui/interfaces/common/Connections.tsx @@ -1,5 +1,5 @@ -import { CSS_COLORS } from '../../constants'; import { classes } from '../../../common/react'; +import { CSS_COLORS } from '../../constants'; const SVG_CURVE_INTENSITY = 64; diff --git a/tgui/packages/tgui/interfaces/common/EditableText.tsx b/tgui/packages/tgui/interfaces/common/EditableText.tsx index 06e5d31c01a..ab6cf191f1c 100644 --- a/tgui/packages/tgui/interfaces/common/EditableText.tsx +++ b/tgui/packages/tgui/interfaces/common/EditableText.tsx @@ -1,5 +1,5 @@ import { useBackend, useLocalState } from 'tgui/backend'; -import { Input, Stack, Box, Button } from 'tgui/components'; +import { Box, Button, Input, Stack } from 'tgui/components'; type Props = { color?: string; diff --git a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx index c31010ff581..bdb00b4b536 100644 --- a/tgui/packages/tgui/interfaces/common/GasmixParser.tsx +++ b/tgui/packages/tgui/interfaces/common/GasmixParser.tsx @@ -1,4 +1,4 @@ -import { LabeledList, Box, Button } from '../../components'; +import { Box, Button, LabeledList } from '../../components'; export type Gasmix = { name?: string; diff --git a/tgui/packages/tgui/interfaces/common/InputButtons.tsx b/tgui/packages/tgui/interfaces/common/InputButtons.tsx index 23452685325..aad3d92f081 100644 --- a/tgui/packages/tgui/interfaces/common/InputButtons.tsx +++ b/tgui/packages/tgui/interfaces/common/InputButtons.tsx @@ -1,6 +1,5 @@ -import { Box, Button, Flex } from '../../components'; - import { useBackend } from '../../backend'; +import { Box, Button, Flex } from '../../components'; type InputButtonsData = { large_buttons: boolean; diff --git a/tgui/packages/tgui/interfaces/common/Loader.tsx b/tgui/packages/tgui/interfaces/common/Loader.tsx index 7f758a94ad9..bf0f432d055 100644 --- a/tgui/packages/tgui/interfaces/common/Loader.tsx +++ b/tgui/packages/tgui/interfaces/common/Loader.tsx @@ -1,6 +1,7 @@ -import { Box } from '../../components'; import { clamp01 } from 'common/math'; +import { Box } from '../../components'; + export const Loader = (props) => { const { value } = props; diff --git a/tgui/packages/tgui/interfaces/common/LoadingToolbox.tsx b/tgui/packages/tgui/interfaces/common/LoadingToolbox.tsx index df8cd88418c..fcd30711090 100644 --- a/tgui/packages/tgui/interfaces/common/LoadingToolbox.tsx +++ b/tgui/packages/tgui/interfaces/common/LoadingToolbox.tsx @@ -1,4 +1,4 @@ -import { Stack, Icon, Dimmer } from '../../components'; +import { Dimmer, Icon, Stack } from '../../components'; /** Spinner that represents loading states. * diff --git a/tgui/packages/tgui/interfaces/common/Objectives.tsx b/tgui/packages/tgui/interfaces/common/Objectives.tsx index 73fbfe2ccf2..16f89d427c6 100644 --- a/tgui/packages/tgui/interfaces/common/Objectives.tsx +++ b/tgui/packages/tgui/interfaces/common/Objectives.tsx @@ -1,5 +1,6 @@ import { BooleanLike } from 'common/react'; import { ReactNode } from 'react'; + import { useBackend } from '../../backend'; import { Button, Stack } from '../../components'; diff --git a/tgui/packages/tgui/interfaces/common/StatusDisplayControls.tsx b/tgui/packages/tgui/interfaces/common/StatusDisplayControls.tsx index a9cd0675c96..48bc48e0ad1 100644 --- a/tgui/packages/tgui/interfaces/common/StatusDisplayControls.tsx +++ b/tgui/packages/tgui/interfaces/common/StatusDisplayControls.tsx @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../../backend'; -import { Flex, Input, Section, Button } from '../../components'; +import { Button, Flex, Input, Section } from '../../components'; type Data = { upperText: string; diff --git a/tgui/packages/tgui/layouts/Layout.jsx b/tgui/packages/tgui/layouts/Layout.jsx index 40c25bfc383..59f7c943b87 100644 --- a/tgui/packages/tgui/layouts/Layout.jsx +++ b/tgui/packages/tgui/layouts/Layout.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { computeBoxClassName, computeBoxProps } from '../components/Box'; import { addScrollableNode, removeScrollableNode } from '../events'; diff --git a/tgui/packages/tgui/layouts/NtosWindow.tsx b/tgui/packages/tgui/layouts/NtosWindow.tsx index db40f075fe7..0d3b2d5d187 100644 --- a/tgui/packages/tgui/layouts/NtosWindow.tsx +++ b/tgui/packages/tgui/layouts/NtosWindow.tsx @@ -5,6 +5,7 @@ */ import { BooleanLike } from 'common/react'; + import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; import { Box, Button } from '../components'; diff --git a/tgui/packages/tgui/layouts/Pane.jsx b/tgui/packages/tgui/layouts/Pane.jsx index b3792312b2c..baad09dd86d 100644 --- a/tgui/packages/tgui/layouts/Pane.jsx +++ b/tgui/packages/tgui/layouts/Pane.jsx @@ -5,6 +5,7 @@ */ import { classes } from 'common/react'; + import { useBackend } from '../backend'; import { Box } from '../components'; import { Layout } from './Layout'; diff --git a/tgui/packages/tgui/layouts/Window.tsx b/tgui/packages/tgui/layouts/Window.tsx index dfb74e7343a..2b6fbf87356 100644 --- a/tgui/packages/tgui/layouts/Window.tsx +++ b/tgui/packages/tgui/layouts/Window.tsx @@ -6,8 +6,12 @@ import { classes } from 'common/react'; import { decodeHtmlEntities, toTitleCase } from 'common/string'; +import { PropsWithChildren, ReactNode, useEffect } from 'react'; + import { backendSuspendStart, useBackend } from '../backend'; +import { globalStore } from '../backend'; import { Icon } from '../components'; +import { BoxProps } from '../components/Box'; import { UI_DISABLED, UI_INTERACTIVE, UI_UPDATE } from '../constants'; import { toggleKitchenSink } from '../debug/actions'; import { @@ -18,9 +22,6 @@ import { } from '../drag'; import { createLogger } from '../logging'; import { Layout } from './Layout'; -import { globalStore } from '../backend'; -import { PropsWithChildren, ReactNode, useEffect } from 'react'; -import { BoxProps } from '../components/Box'; const logger = createLogger('Window'); diff --git a/tgui/packages/tgui/renderer.ts b/tgui/packages/tgui/renderer.ts index 1fc9d134236..692b37322da 100644 --- a/tgui/packages/tgui/renderer.ts +++ b/tgui/packages/tgui/renderer.ts @@ -1,5 +1,6 @@ import { perf } from 'common/perf'; import { render } from 'react-dom'; + import { createLogger } from './logging'; const logger = createLogger('renderer'); diff --git a/tgui/packages/tgui/routes.tsx b/tgui/packages/tgui/routes.tsx index d02ba8210e3..b843da88799 100644 --- a/tgui/packages/tgui/routes.tsx +++ b/tgui/packages/tgui/routes.tsx @@ -4,9 +4,9 @@ * @license MIT */ -import { Window } from './layouts'; import { useBackend } from './backend'; import { LoadingScreen } from './interfaces/common/LoadingToolbox'; +import { Window } from './layouts'; const requireInterface = require.context('./interfaces'); diff --git a/tgui/packages/tgui/store.ts b/tgui/packages/tgui/store.ts index 5a29e8022a6..19483315666 100644 --- a/tgui/packages/tgui/store.ts +++ b/tgui/packages/tgui/store.ts @@ -4,20 +4,20 @@ * @license MIT */ +import { flow } from 'common/fp'; import { - Middleware, - Reducer, - Store, applyMiddleware, combineReducers, createStore, + Middleware, + Reducer, + Store, } from 'common/redux'; -import { backendMiddleware, backendReducer } from './backend'; -import { debugMiddleware, debugReducer, relayMiddleware } from './debug'; import { assetMiddleware } from './assets'; +import { backendMiddleware, backendReducer } from './backend'; +import { debugMiddleware, debugReducer, relayMiddleware } from './debug'; import { createLogger } from './logging'; -import { flow } from 'common/fp'; type ConfigureStoreOptions = { sideEffects?: boolean; diff --git a/tgui/packages/tgui/stories/Storage.stories.jsx b/tgui/packages/tgui/stories/Storage.stories.jsx index 78c3893739f..2fb115bf453 100644 --- a/tgui/packages/tgui/stories/Storage.stories.jsx +++ b/tgui/packages/tgui/stories/Storage.stories.jsx @@ -5,6 +5,7 @@ */ import { storage } from 'common/storage'; + import { Button, LabeledList, NoticeBox, Section } from '../components'; import { formatSiUnit } from '../format'; diff --git a/tgui/yarn.lock b/tgui/yarn.lock index 49f5a5ebf5d..06461a0daaa 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -15,15 +22,6 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:7.12.11": - version: 7.12.11 - resolution: "@babel/code-frame@npm:7.12.11" - dependencies: - "@babel/highlight": ^7.10.4 - checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.14.5": version: 7.16.7 resolution: "@babel/code-frame@npm:7.16.7" @@ -230,7 +228,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.16.7": +"@babel/highlight@npm:^7.16.7": version: 7.17.12 resolution: "@babel/highlight@npm:7.17.12" dependencies: @@ -660,20 +658,45 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^0.4.3": - version: 0.4.3 - resolution: "@eslint/eslintrc@npm:0.4.3" +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" dependencies: ajv: ^6.12.4 - debug: ^4.1.1 - espree: ^7.3.0 - globals: ^13.9.0 - ignore: ^4.0.6 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 import-fresh: ^3.2.1 - js-yaml: ^3.13.1 - minimatch: ^3.0.4 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.56.0": + version: 8.56.0 + resolution: "@eslint/js@npm:8.56.0" + checksum: 5804130574ef810207bdf321c265437814e7a26f4e6fac9b496de3206afd52f533e09ec002a3be06cd9adcc9da63e727f1883938e663c4e4751c007d5b58e539 languageName: node linkType: hard @@ -727,21 +750,28 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.5.0": - version: 0.5.0 - resolution: "@humanwhocodes/config-array@npm:0.5.0" +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.13 + resolution: "@humanwhocodes/config-array@npm:0.11.13" dependencies: - "@humanwhocodes/object-schema": ^1.2.0 + "@humanwhocodes/object-schema": ^2.0.1 debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 + minimatch: ^3.0.5 + checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805 languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.0": - version: 1.2.0 - resolution: "@humanwhocodes/object-schema@npm:1.2.0" - checksum: 40b75480376de8104d65f7c44a7dd76d30fb57823ca8ba3a3239b2b568323be894d93440578a72fd8e5e2cc3df3577ce0d2f0fe308b990dd51cf35392bf3c9a2 +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.1": + version: 2.0.1 + resolution: "@humanwhocodes/object-schema@npm:2.0.1" + checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45 languageName: node linkType: hard @@ -1163,6 +1193,16 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + 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" @@ -1170,6 +1210,13 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.stat@npm:2.0.5": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + "@nodelib/fs.walk@npm:^1.2.3": version: 1.2.6 resolution: "@nodelib/fs.walk@npm:1.2.6" @@ -1180,6 +1227,16 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + "@npmcli/move-file@npm:^1.0.1": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" @@ -1660,65 +1717,73 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" +"@typescript-eslint/parser@npm:^6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/parser@npm:6.14.0" dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/scope-manager": 6.14.0 + "@typescript-eslint/types": 6.14.0 + "@typescript-eslint/typescript-estree": 6.14.0 + "@typescript-eslint/visitor-keys": 6.14.0 debug: ^4.3.4 peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 + checksum: 5fbe8d7431654c14ba6c9782d3728026ad5c90e02c9c4319f45df972e653cf5c15ba320dce70cdffa9fb7ce4c4263c37585e7bc1c909d1252d0a599880963063 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" +"@typescript-eslint/scope-manager@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/scope-manager@npm:6.14.0" dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 + "@typescript-eslint/types": 6.14.0 + "@typescript-eslint/visitor-keys": 6.14.0 + checksum: 0b577d42db925426a9838fe61703c226e18b697374fbe20cf9b93ba30fe58bf4a7f7f42491a4d24b7f3cc12d9a189fe3524c0e9b7708727e710d95b908250a14 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 +"@typescript-eslint/types@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/types@npm:6.14.0" + checksum: 624e6c5227f596dcc9757348d09c5a09b846a62938b8b4409614cf8108013b64ed8b270c32e87ea8890dd09ed896b82e92872c3574dbf07dcda11a168d69dd1f languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" +"@typescript-eslint/typescript-estree@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.14.0" dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + "@typescript-eslint/types": 6.14.0 + "@typescript-eslint/visitor-keys": 6.14.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 peerDependenciesMeta: typescript: optional: true - checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + checksum: 495d7616463685bfd8138ffa9fbc0a7f9130ff8a3f6f85775960b4f0a3fdc259ae53b104cdfe562b60310860b5a6c8387307790734555084aa087e3bb9c28a69 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" +"@typescript-eslint/visitor-keys@npm:6.14.0": + version: 6.14.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.14.0" dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: ^3.3.0 - checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + "@typescript-eslint/types": 6.14.0 + eslint-visitor-keys: ^3.4.1 + checksum: fc593c4e94d5739be7bd88e42313a301bc9806fad758b6a0a1bafd296ff41522be602caf4976beec84e363b0f56585bb98df3c157f70de984de721798501fd8a + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 languageName: node linkType: hard @@ -2120,12 +2185,12 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1": - version: 5.3.1 - resolution: "acorn-jsx@npm:5.3.1" +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: daf441a9d7b59c0ea1f7fe2934c48aca604a007455129ce35fa62ec3d4c8363e2efc2d4da636d18ce0049979260ba07d8b42bc002ae95182916d2c90901529c2 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 languageName: node linkType: hard @@ -2143,15 +2208,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.4.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - "acorn@npm:^8.0.4, acorn@npm:^8.5.0, acorn@npm:^8.7.1": version: 8.8.2 resolution: "acorn@npm:8.8.2" @@ -2161,7 +2217,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": +"acorn@npm:^8.1.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.11.2 resolution: "acorn@npm:8.11.2" bin: @@ -2234,7 +2290,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.11.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.12.6": +"ajv@npm:^6.11.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -2258,25 +2314,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.1": - version: 8.6.2 - resolution: "ajv@npm:8.6.2" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: b86d6cb86c69abbd8ce71ab7d4ff272660bf6d34fa9fbe770f73e54da59d531b2546692e36e2b35bbcfb11d20db774b4c09189671335185b8c799d65194e5169 - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.1 - resolution: "ansi-colors@npm:4.1.1" - checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 - languageName: node - linkType: hard - "ansi-escapes@npm:^4.2.1": version: 4.3.1 resolution: "ansi-escapes@npm:4.3.1" @@ -2488,13 +2525,6 @@ __metadata: languageName: node linkType: hard -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - "asynciterator.prototype@npm:^1.0.0": version: 1.0.0 resolution: "asynciterator.prototype@npm:1.0.0" @@ -3329,7 +3359,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -3588,15 +3618,6 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.5": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 - languageName: node - linkType: hard - "entities@npm:^4.4.0": version: 4.4.0 resolution: "entities@npm:4.4.0" @@ -3963,14 +3984,14 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^9.0.0": - version: 9.0.0 - resolution: "eslint-config-prettier@npm:9.0.0" +"eslint-config-prettier@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js - checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + checksum: 9229b768c879f500ee54ca05925f31b0c0bafff3d9f5521f98ff05127356de78c81deb9365c86a5ec4efa990cb72b74df8612ae15965b14136044c73e1f6a907 languageName: node linkType: hard @@ -4009,18 +4030,27 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-unused-imports@npm:^1.1.5": - version: 1.1.5 - resolution: "eslint-plugin-unused-imports@npm:1.1.5" +"eslint-plugin-simple-import-sort@npm:^10.0.0": + version: 10.0.0 + resolution: "eslint-plugin-simple-import-sort@npm:10.0.0" + peerDependencies: + eslint: ">=5.0.0" + checksum: 23221ff63f80f9c52da807d388ee8a51bc36a3b73345f60ec886e7973c28d75eb1d1e47f7f2916a7c1f94a1b5037b1450356a64a8fbd58096fd6bee57c6e3e48 + languageName: node + linkType: hard + +"eslint-plugin-unused-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-plugin-unused-imports@npm:3.0.0" dependencies: eslint-rule-composer: ^0.3.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ^4.14.2 - eslint: ^6.0.0 || ^7.0.0 + "@typescript-eslint/eslint-plugin": ^6.0.0 + eslint: ^8.0.0 peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: fd1ef93fd414240594ea2f78cd7334523c244af12a610442c6dbf78b0058915c363ce78032730962f510fdd2792ded0607bc13adea9a724d1c5cec736704c99d + checksum: 51666f62cc8dccba2895ced83f3c1e0b78b68c357e17360e156c4db548bfdeda34cbd8725192fb4903f22d5069400fb22ded6039631df01ee82fd618dc307247 languageName: node linkType: hard @@ -4031,7 +4061,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -4041,94 +4071,79 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard -"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard -"eslint@npm:^7.32.0": - version: 7.32.0 - resolution: "eslint@npm:7.32.0" +"eslint@npm:^8.56.0": + version: 8.56.0 + resolution: "eslint@npm:8.56.0" dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.3 - "@humanwhocodes/config-array": ^0.5.0 - ajv: ^6.10.0 + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.56.0 + "@humanwhocodes/config-array": ^0.11.13 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 - debug: ^4.0.1 + debug: ^4.3.2 doctrine: ^3.0.0 - enquirer: ^2.3.5 escape-string-regexp: ^4.0.0 - eslint-scope: ^5.1.1 - eslint-utils: ^2.1.0 - eslint-visitor-keys: ^2.0.0 - espree: ^7.3.1 - esquery: ^1.4.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 - functional-red-black-tree: ^1.0.1 - glob-parent: ^5.1.2 - globals: ^13.6.0 - ignore: ^4.0.6 - import-fresh: ^3.0.0 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - js-yaml: ^3.13.1 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 - minimatch: ^3.0.4 + minimatch: ^3.1.2 natural-compare: ^1.4.0 - optionator: ^0.9.1 - progress: ^2.0.0 - regexpp: ^3.1.0 - semver: ^7.2.1 - strip-ansi: ^6.0.0 - strip-json-comments: ^3.1.0 - table: ^6.0.9 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + checksum: 883436d1e809b4a25d9eb03d42f584b84c408dbac28b0019f6ea07b5177940bf3cca86208f749a6a1e0039b63e085ee47aca1236c30721e91f0deef5cc5a5136 languageName: node linkType: hard -"espree@npm:^7.3.0, espree@npm:^7.3.1": - version: 7.3.1 - resolution: "espree@npm:7.3.1" +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" dependencies: - acorn: ^7.4.0 - acorn-jsx: ^5.3.1 - eslint-visitor-keys: ^1.3.0 - checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 languageName: node linkType: hard @@ -4142,12 +4157,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -4495,6 +4510,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -4635,13 +4660,6 @@ __metadata: languageName: node linkType: hard -"functional-red-black-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "functional-red-black-tree@npm:1.0.1" - checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f - languageName: node - linkType: hard - "functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -4760,6 +4778,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" @@ -4815,12 +4842,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.10.0 - resolution: "globals@npm:13.10.0" +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: ^0.20.2 - checksum: 64e45d96d634d2b047385eb5925de3abb5964cf4f3564eba493694f5ab1a8818b333f89d34b0f71f9b1d87391e6e25c5ca1a87094dd80a657d1d99b9321e1f4e + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard @@ -4863,6 +4890,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -5139,13 +5173,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^4.0.6": - version: 4.0.6 - resolution: "ignore@npm:4.0.6" - checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 - languageName: node - linkType: hard - "ignore@npm:^5.2.0": version: 5.2.4 resolution: "ignore@npm:5.2.4" @@ -5160,7 +5187,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -5481,6 +5508,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -6564,10 +6598,12 @@ __metadata: languageName: node linkType: hard -"lodash.clonedeep@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.clonedeep@npm:4.5.0" - checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a languageName: node linkType: hard @@ -6578,13 +6614,6 @@ __metadata: languageName: node linkType: hard -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 - languageName: node - linkType: hard - "lodash@npm:^4.17.10, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -6779,7 +6808,16 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: ^1.1.7 + checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -7212,17 +7250,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -7235,7 +7273,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -7253,6 +7291,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -7572,13 +7619,6 @@ __metadata: languageName: node linkType: hard -"progress@npm:^2.0.0": - version: 2.0.3 - resolution: "progress@npm:2.0.3" - checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 - languageName: node - linkType: hard - "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -7822,13 +7862,6 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.1.0": - version: 3.1.0 - resolution: "regexpp@npm:3.1.0" - checksum: 63bcb2c98d63274774c79bef256e03f716d25f1fa8427267d0302d1436a83fa0d905f4e8a172fdfa99fb4d84833df2fb3bf7da2a1a868f156e913174c32b1139 - languageName: node - linkType: hard - "request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" @@ -8197,7 +8230,7 @@ resolve@^1.20.0: languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": +"semver@npm:^7.3.2, semver@npm:^7.3.5": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -8208,7 +8241,7 @@ resolve@^1.20.0: languageName: node linkType: hard -"semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -8367,17 +8400,6 @@ resolve@^1.20.0: languageName: node linkType: hard -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - "slugify@npm:^1.5.3": version: 1.6.0 resolution: "slugify@npm:1.6.0" @@ -8769,7 +8791,7 @@ resolve@^1.20.0: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -8886,20 +8908,6 @@ resolve@^1.20.0: languageName: node linkType: hard -"table@npm:^6.0.9": - version: 6.7.1 - resolution: "table@npm:6.7.1" - dependencies: - ajv: ^8.0.1 - lodash.clonedeep: ^4.5.0 - lodash.truncate: ^4.4.2 - slice-ansi: ^4.0.0 - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - checksum: 053b61fa4e8f8396c65ff7a95da90e85620370932652d501ff7a0a3ed7317f1cc549702bd2abf2bd9ed01e20757b73a8b57374f8a8a2ac02fbe0550276263fb6 - languageName: node - linkType: hard - "tapable@npm:^2.1.1, tapable@npm:^2.2.0": version: 2.2.0 resolution: "tapable@npm:2.2.0" @@ -9089,14 +9097,15 @@ resolve@^1.20.0: "@types/node": ^14.x "@types/webpack": ^5.28.5 "@types/webpack-env": ^1.18.4 - "@typescript-eslint/parser": ^5.62.0 + "@typescript-eslint/parser": ^6.14.0 css-loader: ^6.8.1 esbuild-loader: ^4.0.2 - eslint: ^7.32.0 - eslint-config-prettier: ^9.0.0 + eslint: ^8.56.0 + eslint-config-prettier: ^9.1.0 eslint-plugin-radar: ^0.2.1 eslint-plugin-react: ^7.33.2 - eslint-plugin-unused-imports: ^1.1.5 + eslint-plugin-simple-import-sort: ^10.0.0 + eslint-plugin-unused-imports: ^3.0.0 file-loader: ^6.2.0 jest: ^29.7.0 jest-circus: ^29.7.0 @@ -9238,7 +9247,16 @@ resolve@^1.20.0: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 + languageName: node + linkType: hard + +"tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd @@ -9252,17 +9270,6 @@ resolve@^1.20.0: languageName: node linkType: hard -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: ^1.8.1 - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 - languageName: node - linkType: hard - "ttf2eot@npm:^2.0.0": version: 2.0.0 resolution: "ttf2eot@npm:2.0.0" @@ -9592,13 +9599,6 @@ resolve@^1.20.0: languageName: node linkType: hard -"v8-compile-cache@npm:^2.0.3": - version: 2.2.0 - resolution: "v8-compile-cache@npm:2.2.0" - checksum: b5916ac2079a4d3de003d9d657d37e1b96453603158ccf6f3d2cc64d0018b71f3576fd3534f519829f9641b4588c830b9363dc5821fe213a51c1b1b3728a382a - languageName: node - linkType: hard - "v8-to-istanbul@npm:^9.0.1": version: 9.2.0 resolution: "v8-to-istanbul@npm:9.2.0" @@ -9945,13 +9945,6 @@ resolve@^1.20.0: languageName: node linkType: hard -"word-wrap@npm:^1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" From d3bb8c4ad5ff6df3a3ef210014bf9b21b7dc18e8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 19 Dec 2023 20:57:50 +0100 Subject: [PATCH 003/188] [MIRROR] Fixes image onclick [No gbp] [MDB IGNORE] (#25735) * Fixes image onclick [No gbp] (#80441) ## About The Pull Request Noticed by @ stylemistake: onClick event was not being passed into image component ## Why It's Good For The Game Bug fixes ## Changelog :cl: fix: Emojipedia should copy the text on click properly, now /:cl: * Fixes image onclick [No gbp] --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- tgui/packages/tgui/components/Image.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/components/Image.tsx b/tgui/packages/tgui/components/Image.tsx index 0bb374d5e52..3e1519bfbbf 100644 --- a/tgui/packages/tgui/components/Image.tsx +++ b/tgui/packages/tgui/components/Image.tsx @@ -33,13 +33,14 @@ export const Image = (props: Props) => { ...rest } = props; - const computedStyle = { - ...computeBoxProps(rest).style, + const computedProps = computeBoxProps(rest); + computedProps['style'] = { + ...computedProps.style, '-ms-interpolation-mode': fixBlur ? 'nearest-neighbor' : 'auto', objectFit, }; - let content = ; + let content = ; if (tooltip) { content = {content}; From 0aed4579e3d55977952efe97b5392ca8e71e1227 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 19 Dec 2023 20:58:11 +0100 Subject: [PATCH 004/188] Automatic changelog for PR #25735 [ci skip] --- html/changelogs/AutoChangeLog-pr-25735.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25735.yml diff --git a/html/changelogs/AutoChangeLog-pr-25735.yml b/html/changelogs/AutoChangeLog-pr-25735.yml new file mode 100644 index 00000000000..450a371f429 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25735.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Emojipedia should copy the text on click properly, now" \ No newline at end of file From 07127f688e2e49d861eca708e325425a3fa7f653 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 19 Dec 2023 21:41:34 +0100 Subject: [PATCH 005/188] [MIRROR] Admin server announcement uses new announcement span [MDB IGNORE] (#25737) * Admin server announcement uses new announcement span (#80403) ## About The Pull Request The current admin announce is just notice span text, which is easily missed mixed in with all the other white noise of the chat box. Currently admins have to fill it with linebreaks or manually add their own spans to increase visibility. This updates the admin announcement proc to use the new alert box divs, similar to other announcements, making it more visible. ## Why It's Good For The Game Admin server-wide announcements are generally things you want the players to notice ![image](https://github.com/tgstation/tgstation/assets/83487515/460bacbb-3a7f-4855-9e16-24b1533f61bd) ## Changelog :cl: LT3 admin: Server wide admin announcements now use an alert box like other announcements /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * Admin server announcement uses new announcement span --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> --- code/__DEFINES/span.dm | 2 + code/__HELPERS/announcements.dm | 76 +++++++++++++++++++++++++++++++ code/modules/admin/verbs/admin.dm | 2 +- tgstation.dme | 1 + 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 code/__HELPERS/announcements.dm diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index cbd29cd4218..a30e980770b 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -13,6 +13,7 @@ #define span_alertwarning(str) ("" + str + "") #define span_alien(str) ("" + str + "") #define span_announce(str) ("" + str + "") +#define span_announcement_header(str) ("" + str + "") #define span_average(str) ("" + str + "") @@ -70,6 +71,7 @@ #define span_interface(str) ("" + str + "") #define span_linkify(str) ("" + str + "") #define span_looc(str) ("" + str + "") +#define span_major_announcement_text(str) ("" + str + "") #define span_medal(str) ("" + str + "") #define span_medradio(str) ("" + str + "") #define span_memo(str) ("" + str + "") diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm new file mode 100644 index 00000000000..d0deab12e99 --- /dev/null +++ b/code/__HELPERS/announcements.dm @@ -0,0 +1,76 @@ +/** + * Sends a div formatted chat box announcement + * + * Formatted like: + * + * " Server Announcement " (or sender_override) + * + * " Title " + * + * " Text " + * + * Arguments + * * text - required, the text to announce + * * title - optional, the title of the announcement. + * * players - optional, a list of all players to send the message to. defaults to the entire world + * * play_sound - if TRUE, play a sound with the announcement (based on player option) + * * sound_override - optional, override the default announcement sound + * * sender_override - optional, modifies the sender of the announcement + * * encode_title - if TRUE, the title will be HTML encoded + * * encode_text - if TRUE, the text will be HTML encoded + * * color_override - optional, set a color for the announcement box + */ + +/proc/send_formatted_announcement( + text, + title = "", + players, + play_sound = TRUE, + sound_override = 'sound/ai/default/attention.ogg', + sender_override = "Server Admin Announcement", + encode_title = TRUE, + encode_text = TRUE, + color_override = "grey", +) + if(isnull(text)) + return + + var/list/announcement_strings = list() + + if(encode_title && title && length(title) > 0) + title = html_encode(title) + if(encode_text) + text = html_encode(text) + if(!length(text)) + return + + announcement_strings += span_announcement_header(generate_unique_announcement_header(title, sender_override)) + announcement_strings += span_major_announcement_text(text) + var/finalized_announcement = create_announcement_div(jointext(announcement_strings, ""), color_override) + + if(islist(players)) + for(var/mob/target in players) + to_chat(target, finalized_announcement) + if(play_sound && target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(target, sound(sound_override)) + else + to_chat(world, finalized_announcement) + + if(!play_sound) + return + + for(var/mob/player in GLOB.player_list) + if(player.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) + SEND_SOUND(player, sound(sound_override)) + +/** + * Inserts a span styled message into an alert box div + * + * + * Arguments + * * message - required, the message contents + * * color - optional, set a div color other than default + */ +/proc/create_announcement_div(message, color = "default") + var/processed_message = "

[message]
" + return processed_message diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm index 0bd348076aa..67319a32195 100644 --- a/code/modules/admin/verbs/admin.dm +++ b/code/modules/admin/verbs/admin.dm @@ -37,7 +37,7 @@ if(message) if(!check_rights(R_SERVER,0)) message = adminscrub(message,500) - to_chat(world, "[span_adminnotice("[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:")]\n \t [message]", confidential = TRUE) + send_formatted_announcement(message, "From [usr.client.holder.fakekey ? "Administrator" : usr.key]") log_admin("Announce: [key_name(usr)] : [message]") BLACKBOX_LOG_ADMIN_VERB("Announce") diff --git a/tgstation.dme b/tgstation.dme index 5cd2202077b..8bb9ed7da6d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -472,6 +472,7 @@ #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\admin.dm" #include "code\__HELPERS\ai.dm" +#include "code\__HELPERS\announcements.dm" #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\atmospherics.dm" #include "code\__HELPERS\atoms.dm" From 304c43b750d1ac5eff5e002b844a973c14308619 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 19 Dec 2023 21:41:58 +0100 Subject: [PATCH 006/188] Automatic changelog for PR #25737 [ci skip] --- html/changelogs/AutoChangeLog-pr-25737.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25737.yml diff --git a/html/changelogs/AutoChangeLog-pr-25737.yml b/html/changelogs/AutoChangeLog-pr-25737.yml new file mode 100644 index 00000000000..d6edaa02b45 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25737.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - admin: "Server wide admin announcements now use an alert box like other announcements" \ No newline at end of file From 452b6e905c6c7b2ce1b163a0d4ac36cebcba63f3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:34:27 +0100 Subject: [PATCH 007/188] [MIRROR] Disallows siphoning credits outside of station [MDB IGNORE] (#25733) * Disallows siphoning credits outside of station (#80394) ## About The Pull Request Imagine a funny little antagonist going to deep space with one of these. You'll never find them, and even if it were to have a gps signal by the time you were out to the location they could (And most like will) be long gone, or in a different ruin entirely. * Disallows siphoning credits outside of station --------- Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> --- code/game/machinery/bank_machine.dm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 4d276b6ebae..40670a22f44 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -105,14 +105,23 @@ switch(action) if("siphon") - say("Siphon of station credits has begun!") - start_siphon(ui.user) + if(is_station_level(src.z) || is_centcom_level(src.z)) + say("Siphon of station credits has begun!") + start_siphon(ui.user) + else + say("Error: Console not in reach of station, withdrawal cannot begin.") . = TRUE if("halt") say("Station credit withdrawal halted.") end_siphon() . = TRUE +/obj/machinery/computer/bank_machine/on_changed_z_level() + . = ..() + if(siphoning && !(is_station_level(src.z) || is_centcom_level(src.z))) + say("Error: Console not in reach of station. Siphon halted.") + end_siphon() + /obj/machinery/computer/bank_machine/proc/end_siphon() siphoning = FALSE unauthorized = FALSE From d5a02b44e9156989a121e412b3b58b3b7b31411f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:34:34 +0100 Subject: [PATCH 008/188] [MIRROR] Icebox escape pods now properly target the Icemoon surface [MDB IGNORE] (#25740) * Icebox escape pods now properly target the Icemoon surface (#80452) ## About The Pull Request This fixes Icebox escape pods only landing in certain ruins when launched early. `/area/icemoon/surface/outdoors` only shows up in a few select ruins. The new area value used to decide a landing point, `/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters`, covers the majority of the Icemoon surface. ## Why It's Good For The Game Closes #78735. Escape pods might not very useful on Icebox, but this makes using them less hazardous. You're guaranteed to at least land somewhere safe and away from the station. ## Changelog :cl: Rhials fix: Icebox escape pods will now land randomly on the surface, instead of only in certain ruins. /:cl: * Icebox escape pods now properly target the Icemoon surface --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> --- code/modules/shuttle/emergency.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index d1b30ddfad5..73de05a8f37 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -744,7 +744,7 @@ return INITIALIZE_HINT_QDEL /obj/docking_port/stationary/random/icemoon - target_area = /area/icemoon/surface/outdoors + target_area = /area/icemoon/surface/outdoors/unexplored/rivers/no_monsters //Pod suits/pickaxes From 3014be4ce258a5d62a183a5f374dad88da569d65 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:34:48 +0100 Subject: [PATCH 009/188] Automatic changelog for PR #25733 [ci skip] --- html/changelogs/AutoChangeLog-pr-25733.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25733.yml diff --git a/html/changelogs/AutoChangeLog-pr-25733.yml b/html/changelogs/AutoChangeLog-pr-25733.yml new file mode 100644 index 00000000000..907bcc2f49c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25733.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - balance: "Disallows siphoning credits outside of station" \ No newline at end of file From 6c76f02fdaa71c3072e97d0a9d2c131e9fba1d85 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:34:56 +0100 Subject: [PATCH 010/188] Automatic changelog for PR #25740 [ci skip] --- html/changelogs/AutoChangeLog-pr-25740.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25740.yml diff --git a/html/changelogs/AutoChangeLog-pr-25740.yml b/html/changelogs/AutoChangeLog-pr-25740.yml new file mode 100644 index 00000000000..469b24e2e62 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25740.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Icebox escape pods will now land randomly on the surface, instead of only in certain ruins." \ No newline at end of file From 7c0d50e65d4cee9ac1abe0228b45fd4c5a638ede Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:35:19 +0100 Subject: [PATCH 011/188] [MIRROR] Alien nests and some other stuf can be hit again. [MDB IGNORE] (#25736) * Alien nests and some other stuf can be hit again. (#80418) ## About The Pull Request Another small issue fixed. Thanks Melbert for telling us what's wrong with it. EDIT: other objects were rendered unhittable by that flags refactor PR. ## Why It's Good For The Game Fixes #80311. I made the xmas tree indestructible because the comment to the `NO_DECONSTRUCTION` flag didn't make a load of sense since that doesn't stop it from getting destroyed anyway. ## Changelog :cl: MrMelbert, Ghommie fix: Alien nests, and some other stuff, can be physically attacked again. balance: x-mas trees (the ones with presents), are indestructibles. Truly protected by a yuletide spirit. /:cl: * Alien nests and some other stuf can be hit again. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> --- code/game/machinery/dance_machine.dm | 2 +- code/game/machinery/hologram.dm | 2 +- code/game/machinery/limbgrower.dm | 2 +- code/game/machinery/telecomms/machines/allinone.dm | 2 +- code/game/objects/structures/beds_chairs/alien_nest.dm | 2 +- code/game/objects/structures/beds_chairs/chair.dm | 2 +- code/game/objects/structures/flora.dm | 3 ++- code/game/objects/structures/window.dm | 2 +- code/modules/awaymissions/mission_code/murderdome.dm | 2 +- code/modules/capture_the_flag/ctf_game.dm | 2 +- code/modules/food_and_drinks/machinery/food_cart.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 2 +- code/modules/mining/equipment/survival_pod.dm | 2 +- code/modules/reagents/chemistry/machinery/chem_dispenser.dm | 2 +- code/modules/reagents/chemistry/machinery/chem_synthesizer.dm | 2 +- code/modules/shuttle/spaceship_navigation_beacon.dm | 2 +- code/modules/shuttle/special.dm | 4 ++-- code/modules/shuttle/syndicate.dm | 2 +- code/modules/transport/tram/tram_controller.dm | 2 +- 19 files changed, 21 insertions(+), 20 deletions(-) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index d542555af84..de60d84dafd 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -41,7 +41,7 @@ req_access = null anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /datum/track var/song_name = "generic" diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c01fb139c35..bc0d480af64 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -123,7 +123,7 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION on_network = FALSE ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index caedf9fffeb..38d88b013d1 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -283,7 +283,7 @@ /obj/machinery/limbgrower/fullupgrade //Inherently cheaper organ production. This is to NEVER be inherently emagged, no valids. desc = "It grows new limbs using Synthflesh. This alien model seems more efficient." - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/limbgrower/fullupgrade /obj/machinery/limbgrower/fullupgrade/Initialize(mapload) diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index dd1e4a3f610..931979f6b0a 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -20,7 +20,7 @@ /obj/machinery/telecomms/allinone/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/telecomms/allinone/receive_signal(datum/signal/subspace/signal) if(!istype(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) // receives on subspace only diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index fee4703d117..32e1226c93e 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -12,7 +12,7 @@ smoothing_groups = SMOOTH_GROUP_ALIEN_NEST canSmoothWith = SMOOTH_GROUP_ALIEN_NEST build_stack_type = null - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION elevation = 0 var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/nonhuman-player/alien.dmi', "nestoverlay", LYING_MOB_LAYER) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 6dd9c6cd2c7..a6a1131a1b9 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -495,7 +495,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) icon_state = null buildstacktype = null item_chair = null - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION alpha = 0 /obj/structure/chair/mime/post_buckle_mob(mob/living/M) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index d64e658273f..6fcf85630c6 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -446,11 +446,12 @@ name = "xmas tree" desc = "A wondrous decorated Christmas tree." icon_state = "pine_c" - obj_flags = NO_DECONSTRUCTION //protected by the christmas spirit /obj/structure/flora/tree/pine/xmas/presents icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //protected by the christmas spirit + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION var/gift_type = /obj/item/gift/anything var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index f809a3c32fd..678a9a25314 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -803,7 +803,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/reinforced/shuttle/indestructible name = "hardened shuttle window" - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index c99b9d91d5a..2e1154d29cf 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -1,7 +1,7 @@ /obj/structure/window/reinforced/fulltile/indestructible name = "robust window" - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index 980cf1a0f69..f333b370d48 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -464,7 +464,7 @@ /obj/structure/table/reinforced/ctf resistance_flags = INDESTRUCTIBLE - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION #define CTF_LOADING_UNLOADED 0 #define CTF_LOADING_LOADING 1 diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index b7a47b11d62..f8410d2065d 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -8,7 +8,7 @@ anchored = FALSE use_power = NO_POWER_USE req_access = list(ACCESS_KITCHEN) - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION var/unpacked = FALSE var/obj/machinery/griddle/stand/cart_griddle var/obj/machinery/smartfridge/food/cart_smartfridge diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 72f897106dc..d1eb12a4ea9 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1159,7 +1159,7 @@ circuit = null density = FALSE use_power = NO_POWER_USE - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION unwrenchable = FALSE self_sustaining_overlay_icon_state = null maxnutri = 15 diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index c04ad5c6ff1..95ee1015a95 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -201,7 +201,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawne light_color = COLOR_VERY_PALE_LIME_GREEN max_n_of_items = 10 pixel_y = -4 - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/smartfridge/survival_pod/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 1e5f828947a..668cd2b0d76 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -785,7 +785,7 @@ /obj/machinery/chem_dispenser/mutagensaltpeter name = "botanical chemical dispenser" desc = "Creates and dispenses chemicals useful for botany." - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter /// The default list of dispensable reagents available in the mutagensaltpeter chem dispenser diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 6cee41bb3eb..6177baa269a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -6,7 +6,7 @@ base_icon_state = "dispenser" amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION use_power = NO_POWER_USE var/static/list/shortcuts = list( "meth" = /datum/reagent/drug/methamphetamine diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index 71e88c7fcc4..7338d336bde 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -5,7 +5,7 @@ icon_state = "beacon_active" base_icon_state = "beacon" density = TRUE - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /// Locked beacons cannot be jumped to by ships. var/locked = FALSE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 089e8b1f9fe..b897bb76111 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -79,7 +79,7 @@ var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() @@ -201,7 +201,7 @@ /obj/structure/table/wood/shuttle_bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION max_integrity = 1000 var/boot_dir = 1 diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 53d625dc758..4c59d9848fc 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -11,7 +11,7 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/computer/shuttle/syndicate/launch_check(mob/user) . = ..() diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 44a9a4db4b2..ed84ba2cfe0 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -697,7 +697,7 @@ /obj/machinery/transport/tram_controller/hilbert configured_transport_id = HILBERT_LINE_1 - obj_flags = NO_DECONSTRUCTION + obj_flags = /obj::obj_flags | NO_DECONSTRUCTION /obj/machinery/transport/tram_controller/Initialize(mapload) . = ..() From 31d7d8075c40a6d442c6c71f1c407a34ec34ab10 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:36:16 +0100 Subject: [PATCH 012/188] [MIRROR] Fixes circuit variable UI [MDB IGNORE] (#25734) * Fixes circuit variable UI (#80410) ## About The Pull Request Circuit UI bluescreens when inputting a global var. I was curious stepping into this, the recent trend would suggest my recent UI changes did it, but why would it lose an import statement? I looked through the history, and this file's just [never had one](https://github.com/tgstation/tgstation/commit/a4be13ac625f8bf669e2c7b4cd83fffab4759b07#diff-4250b9fec9c0c9ff00917c2e75c6ebd937a364531b9b743b15edd9dfe177be28). It's been calling an undefined tag for two years. Fascinating. ## Why It's Good For The Game Fixes #80387 ## Changelog :cl: fix: Fixed a bluescreen while inputting a global variable in the circuit UI. /:cl: * Fixes circuit variable UI --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx index 1262bdc2868..955e45da41b 100644 --- a/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx +++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/VariableMenu.jsx @@ -15,6 +15,7 @@ import { VARIABLE_LIST, VARIABLE_NOT_A_LIST, } from './constants'; +import { multiline } from 'common/string'; export class VariableMenu extends Component { constructor(props) { From b1e0cd031ffb8f3449c0834415df74894bf6e137 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:46:46 +0100 Subject: [PATCH 013/188] Automatic changelog for PR #25736 [ci skip] --- html/changelogs/AutoChangeLog-pr-25736.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25736.yml diff --git a/html/changelogs/AutoChangeLog-pr-25736.yml b/html/changelogs/AutoChangeLog-pr-25736.yml new file mode 100644 index 00000000000..c413571e47e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25736.yml @@ -0,0 +1,5 @@ +author: "MrMelbert, Ghommie" +delete-after: True +changes: + - bugfix: "Alien nests, and some other stuff, can be physically attacked again." + - balance: "x-mas trees (the ones with presents), are indestructibles. Truly protected by a yuletide spirit." \ No newline at end of file From 32e301ba5cc86a24ead34f6b6bf24fbbb8648bfc Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 00:47:44 +0100 Subject: [PATCH 014/188] Automatic changelog for PR #25734 [ci skip] --- html/changelogs/AutoChangeLog-pr-25734.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25734.yml diff --git a/html/changelogs/AutoChangeLog-pr-25734.yml b/html/changelogs/AutoChangeLog-pr-25734.yml new file mode 100644 index 00000000000..16e7dbf3e2c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25734.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed a bluescreen while inputting a global variable in the circuit UI." \ No newline at end of file From b3e520b9ade36608e3ad26b3c4a42961fd30c43d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 20 Dec 2023 00:28:02 +0000 Subject: [PATCH 015/188] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-25703.yml | 5 ---- html/changelogs/AutoChangeLog-pr-25707.yml | 5 ---- html/changelogs/AutoChangeLog-pr-25709.yml | 4 --- html/changelogs/AutoChangeLog-pr-25721.yml | 4 --- html/changelogs/AutoChangeLog-pr-25724.yml | 4 --- html/changelogs/AutoChangeLog-pr-25728.yml | 4 --- html/changelogs/AutoChangeLog-pr-25733.yml | 4 --- html/changelogs/AutoChangeLog-pr-25734.yml | 4 --- html/changelogs/AutoChangeLog-pr-25735.yml | 4 --- html/changelogs/AutoChangeLog-pr-25736.yml | 5 ---- html/changelogs/AutoChangeLog-pr-25737.yml | 4 --- html/changelogs/AutoChangeLog-pr-25740.yml | 4 --- html/changelogs/archive/2023-12.yml | 29 ++++++++++++++++++++++ 13 files changed, 29 insertions(+), 51 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-25703.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25707.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25709.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25721.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25724.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25728.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25733.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25734.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25735.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25736.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25737.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25740.yml diff --git a/html/changelogs/AutoChangeLog-pr-25703.yml b/html/changelogs/AutoChangeLog-pr-25703.yml deleted file mode 100644 index d6a9d7dc0cc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25703.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - image: "the SpacePol bounty hunters have finally had a new run of Uniforms made, bringing them back to the forefront of enforcement fashion! Wardens will find their Police Jackets/Hats have been updated match SpacePol's new look as well." - - bugfix: "fixed the Mafia Warden having a hat that didn't match his jacket, and fixed SpacePol masks not covering the nose" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25707.yml b/html/changelogs/AutoChangeLog-pr-25707.yml deleted file mode 100644 index c7a5b10fa95..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25707.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "qm's intern id is now \"quartermaster-in-training\"" - - image: "qm's id and hud icons now use the cargo tech icons (but blue) to be consistent with the other heads of staff" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25709.yml b/html/changelogs/AutoChangeLog-pr-25709.yml deleted file mode 100644 index 446537d4c56..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25709.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Made Syndicate Stormtrooper and Nuclear Operative TGC card holograms visible again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25721.yml b/html/changelogs/AutoChangeLog-pr-25721.yml deleted file mode 100644 index 9dc538de7e2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25721.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Hatterhat" -delete-after: True -changes: - - balance: "Rough stones and stone bricks now have 10 force, up from 0, and 15 throwforce, up from 0/10, respectively." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25724.yml b/html/changelogs/AutoChangeLog-pr-25724.yml deleted file mode 100644 index a1bfcef8ed4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25724.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Fixes runtime from augments not unregistering a signal." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25728.yml b/html/changelogs/AutoChangeLog-pr-25728.yml deleted file mode 100644 index 4a3e57411f9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25728.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - image: "cyborg tools became animated" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25733.yml b/html/changelogs/AutoChangeLog-pr-25733.yml deleted file mode 100644 index 907bcc2f49c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25733.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - balance: "Disallows siphoning credits outside of station" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25734.yml b/html/changelogs/AutoChangeLog-pr-25734.yml deleted file mode 100644 index 16e7dbf3e2c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25734.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Fixed a bluescreen while inputting a global variable in the circuit UI." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25735.yml b/html/changelogs/AutoChangeLog-pr-25735.yml deleted file mode 100644 index 450a371f429..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25735.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Emojipedia should copy the text on click properly, now" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25736.yml b/html/changelogs/AutoChangeLog-pr-25736.yml deleted file mode 100644 index c413571e47e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25736.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "MrMelbert, Ghommie" -delete-after: True -changes: - - bugfix: "Alien nests, and some other stuff, can be physically attacked again." - - balance: "x-mas trees (the ones with presents), are indestructibles. Truly protected by a yuletide spirit." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25737.yml b/html/changelogs/AutoChangeLog-pr-25737.yml deleted file mode 100644 index d6edaa02b45..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25737.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - admin: "Server wide admin announcements now use an alert box like other announcements" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25740.yml b/html/changelogs/AutoChangeLog-pr-25740.yml deleted file mode 100644 index 469b24e2e62..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25740.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - bugfix: "Icebox escape pods will now land randomly on the surface, instead of only in certain ruins." \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index 70ae42a2ac9..faa40426581 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -679,3 +679,32 @@ - image: added inhand sprites for towels zeroisthebiggay: - rscadd: face scarves for icewalkers +2023-12-20: + Hatterhat: + - balance: Rough stones and stone bricks now have 10 force, up from 0, and 15 throwforce, + up from 0/10, respectively. + LT3: + - admin: Server wide admin announcements now use an alert box like other announcements + MrMelbert, Ghommie: + - bugfix: Alien nests, and some other stuff, can be physically attacked again. + - balance: x-mas trees (the ones with presents), are indestructibles. Truly protected + by a yuletide spirit. + Rhials: + - bugfix: Icebox escape pods will now land randomly on the surface, instead of only + in certain ruins. + SkyratBot: + - bugfix: Fixes runtime from augments not unregistering a signal. + - bugfix: qm's intern id is now "quartermaster-in-training" + - image: qm's id and hud icons now use the cargo tech icons (but blue) to be consistent + with the other heads of staff + - balance: Disallows siphoning credits outside of station + - bugfix: Made Syndicate Stormtrooper and Nuclear Operative TGC card holograms visible + again + - bugfix: Fixed a bluescreen while inputting a global variable in the circuit UI. + - image: cyborg tools became animated + - image: the SpacePol bounty hunters have finally had a new run of Uniforms made, + bringing them back to the forefront of enforcement fashion! Wardens will find + their Police Jackets/Hats have been updated match SpacePol's new look as well. + - bugfix: fixed the Mafia Warden having a hat that didn't match his jacket, and + fixed SpacePol masks not covering the nose + - bugfix: Emojipedia should copy the text on click properly, now From d6b5e46172efd3e9645fd356fd8708fb4e71273b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 05:00:37 +0100 Subject: [PATCH 016/188] [MIRROR] actually log total vote votes correctly [MDB IGNORE] (#25741) * actually log total vote votes correctly (#80438) yeah i goofed * actually log total vote votes correctly --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> --- code/controllers/subsystem/vote.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 2d134eacb66..c4c3b85b4c9 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -90,6 +90,7 @@ SUBSYSTEM_DEF(vote) var/list/vote_choice_data = list() for(var/choice in current_vote.choices) var/choice_votes = current_vote.choices[choice] + total_votes += choice_votes vote_choice_data["[choice]"] = choice_votes // stringify the winners to prevent potential unimplemented serialization errors. From fd0298cb1403fbb7198c8735af7f529325f6236d Mon Sep 17 00:00:00 2001 From: Hypertorus Fusion Reactor <109750345+dis-integrates-the-integration-tests@users.noreply.github.com> Date: Wed, 20 Dec 2023 06:01:02 +0200 Subject: [PATCH 017/188] *moan but a little more exciting. For mature, rugged souls! (#25559) * ticks new emote file * makes a lewdmoan emote yesyes * change physique to gender * fixes everything else because im dumb * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm (Remove miming check) Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * allows the lewdmoan to vary in pitch Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * uses get_sound() instead of play_lewd_sound Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * uhhh makes a var of get_sound, for lewdness * creates lewdness in /datum/emote/living/lewd * slightly makes the emote louder, because yes * FIXES THE DUMB MOTHERFUCKING ERROR * i forgot dont bully me pls * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/master_files/code/datums/emotes.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * test test does this make it invisible for non-erpers? * Update code/datums/emotes.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update code/datums/emotes.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * added pref_to_check in the visible and audible msg procs * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update code/datums/emotes.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update code/modules/mob/mob.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update code/modules/mob/mob.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Apply suggestions from code review * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * adds pref checks to silicon messages too * changes user.client to M.client * adds pref_to_check to drake override * Update code/datums/emotes.dm * Apply suggestions from code review * Apply suggestions from code review * Update modular_skyrat/modules/modular_items/lewd_items/code/emote.dm --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- code/datums/emotes.dm | 22 ++++++---- .../simple_animal/hostile/megafauna/drake.dm | 2 +- code/modules/mob/mob.dm | 16 ++++++-- .../modular_items/lewd_items/code/emote.dm | 40 +++++++++++++++++++ tgstation.dme | 1 + 5 files changed, 68 insertions(+), 13 deletions(-) create mode 100644 modular_skyrat/modules/modular_items/lewd_items/code/emote.dm diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 9a4a2f263e6..64c7de25764 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -119,7 +119,10 @@ TIMER_COOLDOWN_START(user, type, audio_cooldown) //SKYRAT EDIT CHANGE BEGIN //playsound(user, tmp_sound, 50, vary) - SKYRAT EDIT - ORIGINAL - playsound(user, tmp_sound, sound_volume, vary) + if(istype(src, /datum/emote/living/lewd)) + play_lewd_sound(user, tmp_sound, sound_volume, vary, pref_to_check = /datum/preference/toggle/erp/sounds) + else + playsound(user, tmp_sound, sound_volume, vary) //SKYRAT EDIT CHANGE END var/user_turf = get_turf(user) @@ -128,27 +131,30 @@ if(!ghost.client || isnewplayer(ghost)) continue if(get_chat_toggles(ghost.client) & CHAT_GHOSTSIGHT && !(ghost in viewers(user_turf, null))) - ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg]") + if(pref_check_emote(ghost)) // SKYRAT EDIT ADDITION - Pref checked emotes + ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg]") // SKYRAT EDIT CHANGE - Indented if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE)) //emote is audible and visible - user.audible_message(msg, deaf_message = "You see how [user][space][msg]", audible_message_flags = EMOTE_MESSAGE, separation = space) // SKYRAT EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) + user.audible_message(msg, deaf_message = "You see how [user][space][msg]", audible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // SKYRAT EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) else if(emote_type & EMOTE_VISIBLE) //emote is only visible - user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space) // SKYRAT EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) + user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // SKYRAT EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) if(emote_type & EMOTE_IMPORTANT) for(var/mob/living/viewer in viewers()) if(viewer.is_blind() && !viewer.can_hear()) - to_chat(viewer, msg) + if(pref_check_emote(viewer)) // SKYRAT EDIT ADDITION - Pref checked emotes + to_chat(viewer, msg) // SKYRAT EDIT CHANGE - Indented // SKYRAT EDIT -- BEGIN -- ADDITION -- AI QOL - RELAY EMOTES OVER HOLOPADS var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user] if(hologram) if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE)) - hologram.audible_message(msg, deaf_message = span_emote("You see how [user] [msg]"), audible_message_flags = EMOTE_MESSAGE) + hologram.audible_message(msg, deaf_message = span_emote("You see how [user] [msg]"), audible_message_flags = EMOTE_MESSAGE, pref_to_check = pref_to_check) else if(emote_type & EMOTE_VISIBLE) - hologram.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) + hologram.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, pref_to_check = pref_to_check) if(emote_type & EMOTE_IMPORTANT) for(var/mob/living/viewer in viewers(world.view, hologram)) if(viewer.is_blind() && !viewer.can_hear()) - to_chat(viewer, msg) + if(pref_check_emote(viewer)) + to_chat(viewer, msg) // SKYRAT EDIT -- END /** diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 8531f13c2f5..3cda123814c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -174,7 +174,7 @@ return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE) +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE), pref checks if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 7726d30dc18..817e9ce9474 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -267,7 +267,7 @@ * * vision_distance (optional) define how many tiles away the message can be seen. * * ignored_mob (optional) doesn't show any message to a given mob if TRUE. */ -/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - SEPERATION +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - separation, pref checks var/turf/T = get_turf(src) if(!T) return @@ -298,6 +298,10 @@ for(var/mob/M in hearers) if(!M.client) continue + // SKYRAT EDIT ADDITION - Emote pref checks + if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check)) + continue + // SKYRAT EDIT END //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message @@ -323,7 +327,7 @@ ///Adds the functionality to self_message. -/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks . = ..() if(self_message) show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE) @@ -338,7 +342,7 @@ * * deaf_message (optional) is what deaf people will see. * * hearing_distance (optional) is the range, how many tiles away the message can be heard. */ -/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks var/list/hearers = get_hearers_in_view(hearing_distance, src) //SKYRAT EDIT ADDITION BEGIN - AI QoL @@ -358,6 +362,10 @@ if(audible_message_flags & EMOTE_MESSAGE) message = "[src][separation][message]" //SKYRAT EDIT CHANGE for(var/mob/M in hearers) + // SKYRAT EDIT ADDITION - Emote pref checks + if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check)) + continue + // SKYRAT EDIT END if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear()) M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) @@ -373,7 +381,7 @@ * * deaf_message (optional) is what deaf people will see. * * hearing_distance (optional) is the range, how many tiles away the message can be heard. */ -/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // SKYRAT EDIT ADDITION - Better emotes +/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks . = ..() if(self_message) show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm b/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm new file mode 100644 index 00000000000..f7645d92016 --- /dev/null +++ b/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm @@ -0,0 +1,40 @@ +/datum/emote + /// If we should check a preference for this emote + var/pref_to_check + +/datum/emote/living/lewd + pref_to_check = /datum/preference/toggle/erp + +// Can we play this emote to viewers? +/datum/emote/proc/pref_check_emote(mob/user) + if(isnull(pref_to_check)) + return TRUE + if(!user.client?.prefs.read_preference(pref_to_check)) + return FALSE + +/datum/emote/living/lewd/can_run_emote(mob/living/carbon/user, status_check = TRUE, intentional) + return ..() && user.client?.prefs?.read_preference(pref_to_check) + +/datum/emote/living/lewd/lewdmoan + key = "lewdmoan" + key_third_person = "lewdmoans" + message = "moans lewdly!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound_volume = 35 + +/datum/emote/living/lewd/lewdmoan/get_sound(mob/living/carbon/user) + if(!istype(user)) + return + + if(user.gender == MALE) + return pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg', + 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg', + 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg', + + ) + else + return pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg', + 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg', + 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg', + ) diff --git a/tgstation.dme b/tgstation.dme index 8bb9ed7da6d..3de1bf9b391 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7491,6 +7491,7 @@ #include "modular_skyrat\modules\modular_items\code\thieving_gloves.dm" #include "modular_skyrat\modules\modular_items\lewd_items\code\clothing_pref_check.dm" #include "modular_skyrat\modules\modular_items\lewd_items\code\decals.dm" +#include "modular_skyrat\modules\modular_items\lewd_items\code\emote.dm" #include "modular_skyrat\modules\modular_items\lewd_items\code\lewd_quirks.dm" #include "modular_skyrat\modules\modular_items\lewd_items\code\screen_icons.dm" #include "modular_skyrat\modules\modular_items\lewd_items\code\verbs.dm" From 6d65f0c7dc3f57c528f67b885510c2e5b89815c0 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 05:04:28 +0100 Subject: [PATCH 018/188] Automatic changelog for PR #25559 [ci skip] --- html/changelogs/AutoChangeLog-pr-25559.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25559.yml diff --git a/html/changelogs/AutoChangeLog-pr-25559.yml b/html/changelogs/AutoChangeLog-pr-25559.yml new file mode 100644 index 00000000000..caebbb3a80e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25559.yml @@ -0,0 +1,4 @@ +author: "KannaLisvern" +delete-after: True +changes: + - rscadd: "Added a new ERP emote. *lewdmoan" \ No newline at end of file From 2805c86c811fde2450a054a25c7a665b77df47e5 Mon Sep 17 00:00:00 2001 From: Nerevar <12636964+Nerev4r@users.noreply.github.com> Date: Tue, 19 Dec 2023 22:53:54 -0700 Subject: [PATCH 019/188] [THE HALF-MODULAR PRINCE] Snalance (Snail Balance) and Snissues (Snail Issues) Adjustment (#25439) * initial d * holy shit i forgot * i got so much cheese in my pocket, they thought I was a fucking calzone * opp was sneak-dissing on the 'gram, turned his city into pompeii * Just fixing some diffs (line breaks should match tg) * Fixes these edit comments --------- Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com> --- code/datums/elements/snail_crawl.dm | 14 ++- .../carbon/human/species_types/snail.dm | 92 ++-------------- .../living/carbon/human/species_type/snail.dm | 100 +++++++++++++++++- .../research/designs/limbgrower_designs.dm | 12 +++ .../master_files/icons/obj/surgery.dmi | Bin 6077 -> 6754 bytes modular_skyrat/modules/organs/code/heart.dm | 75 +++++++++++++ modular_skyrat/modules/organs/code/liver.dm | 3 +- tgstation.dme | 1 + 8 files changed, 206 insertions(+), 91 deletions(-) create mode 100644 modular_skyrat/modules/organs/code/heart.dm diff --git a/code/datums/elements/snail_crawl.dm b/code/datums/elements/snail_crawl.dm index 9893c9922ca..80b3f66e03b 100644 --- a/code/datums/elements/snail_crawl.dm +++ b/code/datums/elements/snail_crawl.dm @@ -23,14 +23,24 @@ if(snail.resting && !snail.buckled && lubricate(snail)) snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //SKYRAT EDIT ADDITION BEGIN - This is to prevent snails from achieving FTL speeds without gravity, think of it like snails affixing to walls irl. + ADD_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.AddElement(/datum/element/forced_gravity, 0) + if(HAS_TRAIT(snail, TRAIT_SETTLER)) //This is to keep settlers from reaching FTL speeds too. + snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //SKYRAT EDIT ADDITION END else snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl) + //SKYRAT EDIT ADDITION BEGIN - This clears the forced gravity so they're affected by it while standing. + REMOVE_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC) + snail.RemoveElement(/datum/element/forced_gravity, 0) + //SKYRAT EDIT ADDITION END /datum/element/snailcrawl/proc/lubricate(atom/movable/snail) SIGNAL_HANDLER var/turf/open/OT = get_turf(snail) if(istype(OT)) - OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //SKYRAT EDIT: Roundstart Snails - No more lube - OT.wash(CLEAN_WASH) //SKYRAT EDIT: Roundstart Snails - Snails Keep Clean + OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //SKYRAT EDIT CHANGE: Roundstart Snails - No more lube - ORIGINAL: OT.MakeSlippery(TURF_WET_LUBE, 20) + OT.wash(CLEAN_WASH) //SKYRAT EDIT ADDITION: Roundstart Snails - Snails Keep Clean return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 036b5ad5c24..6f2f12ebe03 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -3,9 +3,9 @@ id = SPECIES_SNAIL inherent_traits = list( TRAIT_MUTANT_COLORS, - // TRAIT_NO_UNDERWEAR, //SKYRAT EDIT - Snails deserve to wear underwear + // TRAIT_NO_UNDERWEAR, //SKYRAT EDIT REMOVAL - Roundstart Snails - Snails deserve to wear underwear TRAIT_NO_SLIP_ALL, - TRAIT_WATER_BREATHING, //SKYRAT EDIT - Roundstart Snails + TRAIT_WATER_BREATHING, //SKYRAT EDIT ADDITION - Roundstart Snails - Sea snails exist, and land snails can weather being underwater for almost a day. ) coldmod = 0.5 //snails only come out when its cold and wet @@ -13,11 +13,9 @@ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP sexes = FALSE //snails are hermaphrodites - eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi' // SKYRAT EDIT - Roundstart Snails mutanteyes = /obj/item/organ/internal/eyes/snail mutanttongue = /obj/item/organ/internal/tongue/snail - mutantliver = /obj/item/organ/internal/liver/snail //SKYRAT EDIT - Roundstart Snails - // exotic_blood = /datum/reagent/lube // SKYRAT EDIT REMOVAL: Roundstart Snails - No more lube + exotic_blood = /datum/reagent/lube bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, @@ -50,9 +48,8 @@ if(new_snailperson.dropItemToGround(bag)) //returns TRUE even if its null new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK) new_snailperson.AddElement(/datum/element/snailcrawl) - new_snailperson.update_icons() //SKYRAT EDIT: Roundstart Snails - //if(ishuman(new_snailperson)) //SKYRAT EDIT: Snails don't have exotic blood here! - // update_mail_goodies(new_snailperson) //SKYRAT EDIT END + if(ishuman(new_snailperson)) + update_mail_goodies(new_snailperson) /datum/species/snail/on_species_loss(mob/living/carbon/former_snailperson, datum/species/new_species, pref_load) . = ..() @@ -63,12 +60,12 @@ former_snailperson.temporarilyRemoveItemFromInventory(bag, TRUE) qdel(bag) -/*/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) //SKYRAT EDIT: Snails don't have exotic blood here! +/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) if(istype(quirk, /datum/quirk/blooddeficiency)) mail_goodies += list( /obj/item/reagent_containers/blood/snail ) - return ..()*/ //SKYRAT EDIT END + return ..() /obj/item/storage/backpack/snail name = "snail shell" @@ -80,81 +77,8 @@ armor_type = /datum/armor/backpack_snail max_integrity = 200 resistance_flags = FIRE_PROOF | ACID_PROOF - //SKYRAT EDIT BEGIN - Roundstart Snails - slowdown = 6 // The snail's shell is what's making them slow. - alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //This makes them layer over tails like the cult backpack; some tails really shouldn't appear over them! - uses_advanced_reskins = TRUE - unique_reskin = list( - "Conical Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "coneshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "coneshell" - ), - "Round Shell" = list( - RESKIN_ICON = 'icons/obj/storage/backpack.dmi', - RESKIN_ICON_STATE = "snailshell", - RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', - RESKIN_WORN_ICON_STATE = "snailshell" - ), - "Cinnamon Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "cinnamonshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "cinnamonshell" - ), - "Caramel Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "caramelshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "caramelshell" - ), - "Metal Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "mechashell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "mechashell" - ), - "Pyramid Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "pyramidshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "pyramidshell" - ), - "Ivory Pyramid Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "pyramidshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "pyramidshellwhite" - ), - "Spiral Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "spiralshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "spiralshell" - ), - "Ivory Spiral Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "spiralshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "spiralshellwhite" - ), - "Rocky Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "rockshell", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "rockshell" - ), - "Ivory Rocky Shell" = list( - RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', - RESKIN_ICON_STATE = "rockshellwhite", - RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', - RESKIN_WORN_ICON_STATE = "rockshellwhite" - ), - ) - //SKYRAT EDIT END - Roundstart Snails -/datum/armor/backpack_snail +/datum/armor/backpack_snail //SKYRAT COMMENT CLARIFICATION - Roundstart Snails - These armor values don't actually do any protection of the wearer, this is for checking direct damage to the backpack. Damage resistance stuff is in their heart file. melee = 40 bullet = 30 laser = 30 diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm index d6ae6c5a103..7d145267b94 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm @@ -1,9 +1,95 @@ #define SHELL_TRANSPARENCY_ALPHA 90 +/datum/species/snail + eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi' //This is to consolidate our icons and prevent future calamity. + mutantliver = /obj/item/organ/internal/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing. + mutantheart = /obj/item/organ/internal/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable. + exotic_blood = null + + eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi' + +/datum/species/snail/on_species_gain(mob/living/carbon/new_snailperson, datum/species/old_species, pref_load) + . = ..() + new_snailperson.update_icons() + +/datum/species/snail/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) + return //This is so that they don't get lube sent in the mail - they don't have exotic blood, so there's no need for it. + /obj/item/storage/backpack/snail /// Whether or not a bluespace anomaly core has been inserted var/storage_core = FALSE - obj_flags = IMMUTABLE_SLOW + slowdown = 6 // The snail's shell is what's making them slow. + obj_flags = IMMUTABLE_SLOW //This should hopefully solve other issues involing it as well. + alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //This makes them layer over tails like the cult backpack; some tails really shouldn't appear over them! + uses_advanced_reskins = TRUE + unique_reskin = list( + "Conical Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "coneshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "coneshell" + ), + "Round Shell" = list( + RESKIN_ICON = 'icons/obj/storage/backpack.dmi', + RESKIN_ICON_STATE = "snailshell", + RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', + RESKIN_WORN_ICON_STATE = "snailshell" + ), + "Cinnamon Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "cinnamonshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "cinnamonshell" + ), + "Caramel Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "caramelshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "caramelshell" + ), + "Metal Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "mechashell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "mechashell" + ), + "Pyramid Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "pyramidshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshell" + ), + "Ivory Pyramid Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "pyramidshellwhite", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "pyramidshellwhite" + ), + "Spiral Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "spiralshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "spiralshell" + ), + "Ivory Spiral Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "spiralshellwhite", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "spiralshellwhite" + ), + "Rocky Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "rockshell", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "rockshell" + ), + "Ivory Rocky Shell" = list( + RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "rockshellwhite", + RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "rockshellwhite" + ), + ) /obj/item/storage/backpack/snail/Initialize(mapload) . = ..() @@ -52,7 +138,7 @@ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "home", SPECIES_PERK_NAME = "Shellback", - SPECIES_PERK_DESC = "Snails have a shell fused to their back. While it doesn't offer any protection, it offers great storage. Alt click to change the sprite!", + SPECIES_PERK_DESC = "Snails have a shell fused to their back. It offers great storage and most importantly gives them 50% brute damage reduction from behind, or while resting. Alt click to change the sprite!", ), list( SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, @@ -60,6 +146,12 @@ SPECIES_PERK_NAME = "Poison Resistance", SPECIES_PERK_DESC = "Snails have a higher tolerance for poison owing to their robust livers.", ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "heart", + SPECIES_PERK_NAME = "Double Hearts", + SPECIES_PERK_DESC = "Snails have two hearts, meaning it'll take more to break theirs.", + ), list( SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "water", @@ -70,13 +162,13 @@ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "bone", SPECIES_PERK_NAME = "Boneless", - SPECIES_PERK_DESC = "Snails are invertebrates.", + SPECIES_PERK_DESC = "Snails are invertebrates, meaning they don't take bone wounds, but are easier to delimb.", ), list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "crutch", SPECIES_PERK_NAME = "Sheer Mollusk Speed", - SPECIES_PERK_DESC = "Snails move incredibly slow while standing. They move much faster while crawling.", + SPECIES_PERK_DESC = "Snails move incredibly slow while standing. They move much faster while crawling, and can stick to the floors when the gravity is out.", ), list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, diff --git a/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm b/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm index 419041848bb..9c65cf4502a 100644 --- a/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm +++ b/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm @@ -19,3 +19,15 @@ id = "snailtongue" build_path = /obj/item/organ/internal/tongue/snail category = list(SPECIES_SNAIL, RND_CATEGORY_INITIAL) + +/datum/design/liver/snail + name = "Snail Liver" + id = "snailliver" + build_path = /obj/item/organ/internal/liver/snail + category = list(SPECIES_SNAIL, RND_CATEGORY_INITIAL) + +/datum/design/heart/snail + name = "Snail Heart" + id = "snailheart" + build_path = /obj/item/organ/internal/heart/snail + category = list(SPECIES_SNAIL, RND_CATEGORY_INITIAL) diff --git a/modular_skyrat/master_files/icons/obj/surgery.dmi b/modular_skyrat/master_files/icons/obj/surgery.dmi index 5a3aabe223b112817b9ace6924c156949ada8e93..3ba35f9ad5afe626c15ec0f5e26ca13343c686a6 100644 GIT binary patch literal 6754 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 Mm9>>Bo>>O|4~+O=+W-In literal 6077 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 diff --git a/modular_skyrat/modules/organs/code/heart.dm b/modular_skyrat/modules/organs/code/heart.dm new file mode 100644 index 00000000000..88f1de4ac4c --- /dev/null +++ b/modular_skyrat/modules/organs/code/heart.dm @@ -0,0 +1,75 @@ +/obj/item/organ/internal/heart/snail + name = "twin gastropod hearts" + desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos." + icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' + icon_state = "heart-snail-on" + base_icon_state = "heart-snail" + maxHealth = 2 * STANDARD_ORGAN_THRESHOLD // There's two of them. Also, due to the special interaction below, it's best we make sure these aren't easily lost. + now_fixed = span_info("Your hearts begin to beat again.") //For the sake of verisimilitude. + + COOLDOWN_DECLARE(shell_effect_cd) + +/obj/item/organ/internal/heart/snail/on_insert(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner)) + return + + if(!issnail(organ_owner)) //This is cleaner than checking for the shell, because there's not really going to be any non-horribly-bugged situation in which a snail will be lacking a shell. + return + + var/mob/living/carbon/human/human_owner = organ_owner + + RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage)) + RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect)) + +/obj/item/organ/internal/heart/snail/on_remove(mob/living/carbon/organ_owner, special) + . = ..() + if(!ishuman(organ_owner) || QDELETED(organ_owner)) + return + + var/mob/living/carbon/human/human_owner = organ_owner + + UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE)) + +/** + * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS] + * + * Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart. + */ +/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_amount, damagetype, attack_direction)) + return + + damage_mods += 0.5 + +/** + * Signal proc for [COMSIG_MOB_AFTER_APPLY_DAMAGE] + * + * Does a special effect if we blocked damage with our shell. + */ +/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item) + SIGNAL_HANDLER + + if(!is_blocking(source, damage_dealt, damagetype, attack_direction)) + return + + if(COOLDOWN_FINISHED(src, shell_effect_cd)) + source.visible_message(span_warning("[source]'s shell weathers the blow, absorbing most of the shock!")) + playsound(source, 'sound/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + + COOLDOWN_START(src, shell_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit + +/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell +/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction) + if(damage_amount < 5 || damagetype != BRUTE || !attack_direction) + return + if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS) + return FALSE + // No tactical spinning + if(HAS_TRAIT(blocker, TRAIT_SPINNING)) + return FALSE + if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction)) + return TRUE + return FALSE diff --git a/modular_skyrat/modules/organs/code/liver.dm b/modular_skyrat/modules/organs/code/liver.dm index 1fe231786ea..8c275530084 100644 --- a/modular_skyrat/modules/organs/code/liver.dm +++ b/modular_skyrat/modules/organs/code/liver.dm @@ -1,6 +1,7 @@ /obj/item/organ/internal/liver/snail name = "gastropod liver" - icon_state = "liver-x" + icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi' + icon_state = "liver-snail" desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most." maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD toxTolerance = 5 //can shrug off up to 5u of toxins diff --git a/tgstation.dme b/tgstation.dme index 3de1bf9b391..fb5459dc95b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7751,6 +7751,7 @@ #include "modular_skyrat\modules\opposing_force\code\equipment\modsuit.dm" #include "modular_skyrat\modules\opposing_force\code\equipment\spells.dm" #include "modular_skyrat\modules\opposing_force\code\equipment\uplink.dm" +#include "modular_skyrat\modules\organs\code\heart.dm" #include "modular_skyrat\modules\organs\code\liver.dm" #include "modular_skyrat\modules\organs\code\lungs.dm" #include "modular_skyrat\modules\organs\code\organs.dm" From cb729735bf01063890e6bdd667809dbed43a02a0 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 06:54:20 +0100 Subject: [PATCH 020/188] Automatic changelog for PR #25439 [ci skip] --- html/changelogs/AutoChangeLog-pr-25439.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25439.yml diff --git a/html/changelogs/AutoChangeLog-pr-25439.yml b/html/changelogs/AutoChangeLog-pr-25439.yml new file mode 100644 index 00000000000..c47128d686f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25439.yml @@ -0,0 +1,6 @@ +author: "Nerev4r" +delete-after: True +changes: + - rscadd: "Due to increased availability of calcium supplements in Sector 13 due to Deep Spacer lobbying, snailpeople have found their shells to be more suited towards protection of themselves and their recently-discovered-to-be-binary hearts in a combat scenario." + - rscadd: "Snailpeople have been invited to recent EVA training sessions, and have learned to attach themselves to the floors if gravity generators go out; who'd have thunk it?" + - bugfix: "Snailpeople no longer benefit from Settler's equipment load reduction while crawling. I could not think of a funny caption for this." \ No newline at end of file From b48b7a9451803396c3717f97a0710a0eb46cfb3b Mon Sep 17 00:00:00 2001 From: RaShCAt <33174229+RaShCat@users.noreply.github.com> Date: Wed, 20 Dec 2023 09:18:16 +0300 Subject: [PATCH 021/188] Teshari offsets and simple redraw of sabres for them. (#25712) * Just one pixel! Sorry! Simple redraw in belt.dmi for sabres. * Also teshari offsets --- .../mob/clothing/species/teshari/belt.dmi | Bin 8118 -> 8060 bytes .../bodyparts/code/teshari_bodyparts.dm | 19 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi b/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi index eadfe01a6e37755cc50281c71080bfd51df95aa2..c3ee69dd2a334bf0f859596c5ba371c3482ab381 100644 GIT binary patch literal 8060 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 ZNsdwW=lf>x7W|zKC@ZML%H>Q#{trT0Z{h#| literal 8118 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 diff --git a/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm b/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm index 3762bf1d0a8..2127353beff 100644 --- a/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm +++ b/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm @@ -21,7 +21,7 @@ worn_head_offset = new( attached_part = src, feature_key = OFFSET_HEAD, - offset_x = list("north" = 1, "south" = 1, "east" = 1, "west" = -1, "northwest" = -1, "southwest" = -1), + offset_x = list("north" = 1, "south" = 1, "east" = 1, "west" = -1, "northwest" = -1, "southwest" = -1, "northeast" = 1, "southeast" = 1), offset_y = list("north" = -4, "south" = -4, "east" = -4, "west" = -4), ) worn_mask_offset = new( @@ -52,6 +52,23 @@ ) return ..() +/obj/item/bodypart/arm/left/mutant/teshari/Initialize(mapload) + held_hand_offset = new( + attached_part = src, + feature_key = OFFSET_HELD, + offset_x = list("north" = 0, "south" = 0, "east" = 0, "west" = -6, "northwest" = -6, "southwest" = -6, "northeast" = 0, "southeast" = 0), + offset_y = list("north" = -3, "south" = -3, "east" = -3, "west" = -3), + ) + return ..() + +/obj/item/bodypart/arm/right/mutant/teshari/Initialize(mapload) + held_hand_offset = new( + attached_part = src, + feature_key = OFFSET_HELD, + offset_x = list("north" = 0, "south" = 0, "east" = 6, "west" = 0, "northwest" = 0, "southwest" = 0, "northeast" = 6, "southeast" = 6), + offset_y = list("north" = -3, "south" = -3, "east" = -3, "west" = -3), + ) + return ..() /obj/item/bodypart/arm/left/mutant/teshari icon_greyscale = BODYPART_ICON_TESHARI From 1b6e3f9098e01133b949125aa75ba027fe30ab9d Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 07:18:39 +0100 Subject: [PATCH 022/188] Automatic changelog for PR #25712 [ci skip] --- html/changelogs/AutoChangeLog-pr-25712.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25712.yml diff --git a/html/changelogs/AutoChangeLog-pr-25712.yml b/html/changelogs/AutoChangeLog-pr-25712.yml new file mode 100644 index 00000000000..00cb69b9193 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25712.yml @@ -0,0 +1,5 @@ +author: "RaShCat" +delete-after: True +changes: + - bugfix: "offsets of items in teshari's paws and worn head" + - image: "simple redraw of teshari's sabres." \ No newline at end of file From a6e49dbdee25f0af7b63bc9b31269e1d97ee4c31 Mon Sep 17 00:00:00 2001 From: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:23:44 -0500 Subject: [PATCH 023/188] PR of the day, a day late | I HATE THE ANTICHRIST!! | Upgrades the SolFed response outfits (except the engineering one) (#25490) * everything * puts the right item paths there * fixes the gas masks * fixes outfit sanity * Adds trailing commas to multi-line lists. --------- Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> --- .../code/armament_datums/sol_defense.dm | 20 +++-- .../modules/goofsec/code/sol_fed.dm | 84 ++++++++++-------- .../modules/goofsec/code/solfed_clothing.dm | 42 +++++++++ .../modules/goofsec/icons/uniforms.dmi | Bin 0 -> 1212 bytes .../modules/goofsec/icons/uniforms_worn.dmi | Bin 0 -> 3403 bytes .../goofsec/icons/uniforms_worn_digi.dmi | Bin 0 -> 2647 bytes tgstation.dme | 1 + 7 files changed, 106 insertions(+), 41 deletions(-) create mode 100644 modular_skyrat/modules/goofsec/code/solfed_clothing.dm create mode 100644 modular_skyrat/modules/goofsec/icons/uniforms.dmi create mode 100644 modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi create mode 100644 modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm b/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm index 0d7e4a8eca1..97a9f446cb9 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm @@ -2,6 +2,18 @@ category = SOL_DEFENSE_DEFENSE_NAME company_bitflag = CARGO_COMPANY_SOL_DEFENSE +// Beautiful SolFed clothing + +/datum/armament_entry/company_import/sol_defense/clothing + subcategory = "Surplus Clothing" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/sol_defense/clothing/peacekeeper + item_type = /obj/item/clothing/under/sol_peacekeeper + +/datum/armament_entry/company_import/sol_defense/clothing/emt + item_type = /obj/item/clothing/under/sol_emt + // Armor vests for protecting against bullets /datum/armament_entry/company_import/sol_defense/armor @@ -20,12 +32,11 @@ /datum/armament_entry/company_import/sol_defense/armor/sf_soft_vest item_type = /obj/item/clothing/suit/armor/sf_peacekeeper -/datum/armament_entry/company_import/sol_defense/armor/normal_vest - name = "type I vest - normal" - item_type = /obj/item/clothing/suit/armor/vest/alt +/datum/armament_entry/company_import/sol_defense/armor/flak_jacket + item_type = /obj/item/clothing/suit/armor/vest/det_suit/sol /datum/armament_entry/company_import/sol_defense/armor/slim_vest - name = "type I vest - slim" + name = "type I vest" item_type = /obj/item/clothing/suit/armor/vest /datum/armament_entry/company_import/sol_defense/armor_hardened @@ -35,7 +46,6 @@ /datum/armament_entry/company_import/sol_defense/armor_hardened/enclosed_helmet item_type = /obj/item/clothing/head/helmet/toggleable/sf_hardened - /datum/armament_entry/company_import/sol_defense/armor_hardened/emt_enclosed_helmet item_type = /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_skyrat/modules/goofsec/code/sol_fed.dm index 2e8348b8eba..2f6e9064c50 100644 --- a/modular_skyrat/modules/goofsec/code/sol_fed.dm +++ b/modular_skyrat/modules/goofsec/code/sol_fed.dm @@ -321,21 +321,24 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/police name = "911 Response: Marshal" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/security/detective/cowboy - shoes = /obj/item/clothing/shoes/cowboy + back = /obj/item/storage/backpack/satchel + uniform = /obj/item/clothing/under/sol_peacekeeper + suit = /obj/item/clothing/suit/armor/vest/det_suit/sol + shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt - head = /obj/item/clothing/head/cowboy - belt = /obj/item/gun/energy/disabler - r_pocket = /obj/item/lighter + head = /obj/item/clothing/head/soft/black + suit_store = /obj/item/gun/energy/disabler + belt = /obj/item/melee/baton/security/loaded + r_pocket = /obj/item/flashlight/seclite l_pocket = /obj/item/restraints/handcuffs id = /obj/item/card/id/advanced/solfed - backpack_contents = list(/obj/item/storage/box/survival = 1, + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/storage/box/handcuffs = 1, - /obj/item/melee/baton/security/loaded = 1, /obj/item/solfed_reporter/swat_caller = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -366,7 +369,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/rwd/loaded = 1, /obj/item/beamout_tool = 1, /obj/item/solfed_reporter/swat_caller = 1, - ) + ) id_trim = /datum/id_trim/solfed/atmos /obj/item/radio/headset/headset_solfed/atmos @@ -396,21 +399,25 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/emt name = "911 Response: EMT" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/medical/paramedic - shoes = /obj/item/clothing/shoes/sneakers/white + back = /obj/item/storage/backpack/medic + uniform = /obj/item/clothing/under/sol_emt + shoes = /obj/item/clothing/shoes/jackboots ears = /obj/item/radio/headset/headset_med - head = /obj/item/clothing/head/soft/paramedic + mask = /obj/item/clothing/mask/gas/alt + head = /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt id = /obj/item/card/id/advanced/solfed - suit = /obj/item/clothing/suit/toggle/labcoat/paramedic + suit = /obj/item/clothing/suit/armor/sf_hardened/emt gloves = /obj/item/clothing/gloves/latex/nitrile - belt = /obj/item/storage/belt/medical/paramedic - suit_store = /obj/item/flashlight/pen/paramedic - backpack_contents = list(/obj/item/storage/box/survival = 1, + belt = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + suit_store = /obj/item/tank/internals/emergency_oxygen/engi + r_pocket = /obj/item/flashlight/seclite + l_pocket = /obj/item/storage/medkit/civil_defense + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/emergency_bed = 1, - /obj/item/storage/medkit/surgery = 1, /obj/item/solfed_reporter/swat_caller = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -438,24 +445,26 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/condom_destroyer name = "911 Response: Armed S.W.A.T. Officer" - back = /obj/item/storage/backpack/duffelbag/cops - uniform = /obj/item/clothing/under/rank/security/officer/beatcop + back = /obj/item/storage/backpack + uniform = /obj/item/clothing/under/sol_peacekeeper shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt - head = /obj/item/clothing/head/helmet/toggleable/riot + head = /obj/item/clothing/head/helmet/sf_peacekeeper belt = /obj/item/gun/energy/disabler - suit = /obj/item/clothing/suit/armor/riot - r_pocket = /obj/item/lighter + suit = /obj/item/clothing/suit/armor/sf_peacekeeper + r_pocket = /obj/item/flashlight/seclite l_pocket = /obj/item/restraints/handcuffs id = /obj/item/card/id/advanced/solfed - l_hand = /obj/item/gun/ballistic/shotgun/riot - backpack_contents = list(/obj/item/storage/box/survival = 1, + l_hand = /obj/item/gun/ballistic/shotgun/riot/sol + backpack_contents = list( + /obj/item/storage/box/survival = 1, /obj/item/storage/box/handcuffs = 1, /obj/item/melee/baton/security/loaded = 1, /obj/item/storage/box/lethalshot = 2, /obj/item/solfed_reporter/treason_reporter = 1, - /obj/item/beamout_tool = 1) + /obj/item/beamout_tool = 1, + ) id_trim = /datum/id_trim/solfed @@ -482,22 +491,25 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /datum/outfit/request_911/treason_destroyer name = "911 Response: SolFed Military" - uniform = /obj/item/clothing/under/rank/security/officer/hecu - head = /obj/item/clothing/head/helmet - mask = /obj/item/clothing/mask/gas/hecu2 + uniform = /obj/item/clothing/under/sol_peacekeeper + head = /obj/item/clothing/head/helmet/sf_sacrificial + mask = /obj/item/clothing/mask/gas/alt gloves = /obj/item/clothing/gloves/combat - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat + suit = /obj/item/clothing/suit/armor/sf_sacrificial + shoes = /obj/item/clothing/shoes/jackboots - back = /obj/item/storage/backpack/duffelbag/cops + back = /obj/item/storage/backpack glasses = /obj/item/clothing/glasses/sunglasses ears = /obj/item/radio/headset/headset_sec/alt l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/flashlight/seclite id = /obj/item/card/id/advanced/solfed r_hand = /obj/item/gun/ballistic/automatic/sol_rifle - backpack_contents = list(/obj/item/storage/box/handcuffs = 1, + backpack_contents = list( + /obj/item/storage/box/handcuffs = 1, + /obj/item/sacrificial_face_shield = 1, /obj/item/melee/baton/security/loaded = 1, - /obj/item/ammo_box/magazine/c40sol_rifle/standard = 4 + /obj/item/ammo_box/magazine/c40sol_rifle/standard = 4, ) id_trim = /datum/id_trim/solfed diff --git a/modular_skyrat/modules/goofsec/code/solfed_clothing.dm b/modular_skyrat/modules/goofsec/code/solfed_clothing.dm new file mode 100644 index 00000000000..ab3bff3e7d2 --- /dev/null +++ b/modular_skyrat/modules/goofsec/code/solfed_clothing.dm @@ -0,0 +1,42 @@ +// Peacekeeper jumpsuit + +/obj/item/clothing/under/sol_peacekeeper + name = "sol peacekeeper uniform" + desc = "A military-grade uniform with military grade comfort (none at all), often seen on \ + SolFed's various peacekeeping forces, and usually alongside a blue helmet." + icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi' + icon_state = "peacekeeper" + worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_digi = 'modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi' + worn_icon_state = "peacekeeper" + armor_type = /datum/armor/clothing_under/rank_security + inhand_icon_state = null + has_sensor = SENSOR_COORDS + random_sensor = FALSE + +// EMT jumpsuit + +/obj/item/clothing/under/sol_emt + name = "sol emergency medical uniform" + desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built paramedics in mind." + icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi' + icon_state = "emt" + worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_digi = 'modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi' + worn_icon_state = "emt" + armor_type = /datum/armor/clothing_under/rank_medical + inhand_icon_state = null + has_sensor = SENSOR_COORDS + random_sensor = FALSE + +// Solfed flak jacket, for marshals + +/obj/item/clothing/suit/armor/vest/det_suit/sol + name = "'Gordyn' flak vest" + desc = "A light armored jacket common on SolFed personnel who need armor, but find a full vest \ + too impractical or uneeded." + icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi' + icon_state = "flak" + worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi' + worn_icon_state = "flak" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON diff --git a/modular_skyrat/modules/goofsec/icons/uniforms.dmi b/modular_skyrat/modules/goofsec/icons/uniforms.dmi new file mode 100644 index 0000000000000000000000000000000000000000..82b6c313b73325036f28217b0d24d3d595ae023a GIT binary patch literal 1212 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 J|ET8@^FJ>4w(tM| literal 0 HcmV?d00001 diff --git a/modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi b/modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi new file mode 100644 index 0000000000000000000000000000000000000000..934a079713ae3675671ffb07d562405355746e06 GIT binary patch literal 2647 zcmbu>X*?9_9tZFl8iX-A30cCyAcP!aDKoY#A!Q0>$&#{W8GDA2oRTA*B4G*I+xM>$;ZT+TC#j*Pt#L`CO0vo{K0#f! zqChw|B|*JdUQP219)>T3!Q--42@}7#5@uj#w_8X0L2C+tOM-BkO2DHo0N`YbnUVg@ zFzk#`c&9l@o*yrj(TTbc2vQq!2K>mH;MkcT5dc;{O;63u(7etL9%F4 zfNm;$to(p6HPuL;9M`x@?b7^Q_YX?-%87x;&`O|BjAg0v-t9y&XV*Coze(j!hjHL7 zbBW_gv?^*eUu)641>IePcvY#odHHf^$lezs(6nw#m>3|jW{I=9-a@8ok7M{SB5_YM)8L4W%ewqH5DgvBRUjI^@BgZ;1;uJ9 z)Mvw4G7l$Z^a$uePP9F5Syr`bT)|HYd9~lrXHEkTz+vB*_JtP zjyPDyh0~php`GIE%`}|Qq{(YePIxqb!LbTD`Y93N@0_`D-ylDS(Z$>+X~tECMjnxQ zMr&Gd%K&<&)&d-R5R2%41At*KG4-u``C&{Cpq`BpnsbI!xwZ3n z$8hE*%$;#tG{8Yi?|hxLfhDy+jc0wrLBz0_T{0&OxVfh}b-4+@hsY{2>qK7}dc@dI zqJuP)ZXE{a5+E^dt>=7Zh$_cz`N7}+Ouq>JjovTB2f2RRSPlYB>u+Oeu(Xfd|Qb7!sdV_WHlNX%ys^O}H zno696Yj;+n8fJtiUO9GLFpHOqcf8*$<(mDW`{tEO7elW^56-MpPv7ehSu#;Z0?UB0;tK4evH&izNSlDwgA?~{ucS`+`*#2TjR);V7jk43}6;wZb)_9{fA|hSHL$BM* zKEu^>4Y15qWfq;k*Vm6K{(ZJ?*1WTFcy&IaZ$xXSn6U6A6Gfevhj_DBW}WmUwJ1pW zBvfUWu|JstNo#EuHmIB_TEWyuuB^q5{kp&b>W!28!X=gioog_C=@M zn<$P+Tf8X4Eh6od>%i^!Oe%IJVUbhnQ$IxCoi9y9=hxJz?06wp+r>aOu!sI>`sf=M zEFyy6uA196d|7bM|QjS3RmFZr8YwzTLboj3mKWBoM22UB(-aR9cmB=L?yaf!T*gC3j0m~UY zv$TGPW$<$dKaztL@pJ6*aLlxAB%p)y`o9A64V7@}@0ArXMQ;lzAi;|Iff}9XkgR=x z?bs0XIYjc`Ed9ORGpNyVl+VbXa-+BH)H1woQ!X@$nkXCFmw&&V7IKgzM*Q5=d;DYK z(ed_P*s7dKIrBo&0qCpx9(kZDOR2!}((elNP6XH3QI8cm?*_>E3>h(p#%?nsF)Z-Hb*td|!0ou<66yl zcazY5#mJ@|95GtMFSA84RX3c}xJg_A(GqMjEghGG2ur)khk{xo;7mqR!~SRQ2^6Ji zK*gu}M5z?b4%6FQ%>R|f{(!OOL7p0;4INFlE?cFx4RfoJmrni7$_!&D$Eu!sp8}BQ>0w9G}J4MD)m0* zr(6$$Er)zR5jj@c@q*L!86#ESCd&&UcT2~2B~{I57V=XMM16FUJ-t|Q3wRC@C6Bui zOuF(Gx`af2Ec4!h*X*`7K0IFdR&@B;LM-GN#D4+LWApt{pyL#Or> z9&nVQ2JH4uZMtm^Z9f)G1c2 z_MskAKR#;ABv&3(Xca-{AjS8N92U zj(jak#?YP?%o6n!5+UJs-Yi+c`HYyXEiGXfHlm9qI!DY}2L dBmABT>Bml^8fb{wJ=lE$sjR literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index fb5459dc95b..7f0541e2d21 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7203,6 +7203,7 @@ #include "modular_skyrat\modules\goofsec\code\hud.dm" #include "modular_skyrat\modules\goofsec\code\sec_clothing_overrides.dm" #include "modular_skyrat\modules\goofsec\code\sol_fed.dm" +#include "modular_skyrat\modules\goofsec\code\solfed_clothing.dm" #include "modular_skyrat\modules\gun_safety\code\keybinding.dm" #include "modular_skyrat\modules\gun_safety\code\safety_additions.dm" #include "modular_skyrat\modules\gun_safety\code\safety_component.dm" From ee7f872dd5a00ffd076c21b1273b531f7f85390f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 16:24:09 +0100 Subject: [PATCH 024/188] Automatic changelog for PR #25490 [ci skip] --- html/changelogs/AutoChangeLog-pr-25490.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25490.yml diff --git a/html/changelogs/AutoChangeLog-pr-25490.yml b/html/changelogs/AutoChangeLog-pr-25490.yml new file mode 100644 index 00000000000..aa19906705c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25490.yml @@ -0,0 +1,5 @@ +author: "Paxilmaniac" +delete-after: True +changes: + - balance: "SolFed response team equipment has been changed around a bit with the new armor and whatnot." + - image: "SolFed response teams (and cargo imports) can now see a new set of SolFed uniforms, one for peacekeepers and one for EMTs. No longer do they have to dress as wild west larpers, or half life HECU." \ No newline at end of file From 21b50f27383709803913d2f124b1e93d1c9e4164 Mon Sep 17 00:00:00 2001 From: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:25:29 -0500 Subject: [PATCH 025/188] Makes the arc welder sound a gazillion times better (#25744) the arc welder she told you not to worry about --- .../colony_fabricator/code/tools/tools.dm | 7 +------ .../sound/arc_welder/arc_welder.ogg | Bin 0 -> 36944 bytes .../colony_fabricator/sound/attributions.txt | 4 ++++ 3 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm index 554b8d3d3ff..604bf109b0e 100644 --- a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm +++ b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm @@ -134,12 +134,7 @@ but it still gets the job done and chances are you printed this bad boy off for free." icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi' icon_state = "arc_welder" - usesound = list( - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav', - 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav', - ) + usesound = 'modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg' light_range = 2 light_power = 0.75 toolspeed = 1 diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg b/modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8c76738f0f473774d628569427556355e0622310 GIT binary patch literal 36944 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 Y0L*;Ed;E;_*;onD27vR$0Ufxe1lg{-k^lez literal 0 HcmV?d00001 diff --git a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt index e9c05e68c01..41f5a6b8600 100644 --- a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt +++ b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt @@ -8,3 +8,7 @@ modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/ modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav + +The following sounds are from https://pixabay.com/sound-effects/welder-3-54547/ + +modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg From e6949b90c719adc87081c464f15d484675afa82f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 16:26:13 +0100 Subject: [PATCH 026/188] Automatic changelog for PR #25744 [ci skip] --- html/changelogs/AutoChangeLog-pr-25744.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25744.yml diff --git a/html/changelogs/AutoChangeLog-pr-25744.yml b/html/changelogs/AutoChangeLog-pr-25744.yml new file mode 100644 index 00000000000..33f3cc56410 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25744.yml @@ -0,0 +1,4 @@ +author: "Paxilmaniac" +delete-after: True +changes: + - sound: "The sound effect that the arc welder uses has been changed to be less quiet and more noticable" \ No newline at end of file From 23f5b3b59bb8f941b3194e632deeeb399f060e5d Mon Sep 17 00:00:00 2001 From: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:28:02 -0500 Subject: [PATCH 027/188] Gives the carwo rifles names that suck less to refer to (#25730) its that shrimple i think --- .../carwo_defense_systems/rifle.dm | 12 ++++++------ .../modules/opposing_force/code/equipment/guns.dm | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm index 5b298fec87c..fbf5f38b6cf 100644 --- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm +++ b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm @@ -1,7 +1,7 @@ // Base Sol rifle /obj/item/gun/ballistic/automatic/sol_rifle - name = "\improper Carwo 'd'Infanteria' Rifle" + name = "\improper Carwo-Cawil Battle Rifle" desc = "A heavy battle rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi' @@ -57,7 +57,7 @@ /obj/item/gun/ballistic/automatic/sol_rifle/examine_more(mob/user) . = ..() - . += "The d'Infanterie rifles are, as the name may imply, built by Carwo for \ + . += "The Carwo-Cawil rifles are built by Carwo for \ use by SolFed's various infantry branches. Following the rather reasonable \ military requirements of using the same few cartridges and magazines, \ the lifespans of logistics coordinators and quartermasters everywhere \ @@ -74,7 +74,7 @@ // Sol marksman rifle /obj/item/gun/ballistic/automatic/sol_rifle/marksman - name = "\improper Carwo 'd'Elite' Marksman Rifle" + name = "\improper Cawil Marksman Rifle" desc = "A heavy marksman rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." icon_state = "elite" @@ -100,7 +100,7 @@ /obj/item/gun/ballistic/automatic/sol_rifle/marksman/examine_more(mob/user) . = ..() - . += "This particlar variant, often called 'd'Elite', is a marksman rifle. \ + . += "This particlar variant is a marksman rifle. \ Automatic fire was forsaken for a semi-automatic setup, a more fitting \ stock, and more often than not a scope. Typically also seen with smaller \ magazines for convenience for the shooter, but as with any other Sol \ @@ -114,7 +114,7 @@ // Machinegun based on the base Sol rifle /obj/item/gun/ballistic/automatic/sol_rifle/machinegun - name = "\improper Carwo 'd'Outomaties' Machinegun" + name = "\improper Qarad Light Machinegun" desc = "A hefty machinegun commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine." icon_state = "outomaties" @@ -134,7 +134,7 @@ /obj/item/gun/ballistic/automatic/sol_rifle/machinegun/examine_more(mob/user) . = ..() - . += "The d'Outomaties variant of the rifle, what you are looking at now, \ + . += "The 'Qarad' variant of the rifle, what you are looking at now, \ is a modification to turn the weapon into a passable, if sub-optimal \ light machinegun. To support the machinegun role, the internals were \ converted to make the gun into an open bolt, faster firing machine. These \ diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm index b0644c24565..66d34e97fae 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/guns.dm @@ -12,7 +12,7 @@ new /obj/item/ammo_box/advanced/s12gauge/buckshot(src) /datum/opposing_force_equipment/ranged/infanteria - name = "'d'Infanteria' Rifle" + name = "Carwo-Cawil Battle Rifle" description = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine." item_type = /obj/item/storage/toolbox/guncase/skyrat/opfor/infanteria From ca9ce7f766127f55688b5c11cdee3bf8d7742e01 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:30:43 -0500 Subject: [PATCH 028/188] [MODULAR] Fixes Company Imports (#25743) * Fixes Company Imports * Prettier --- .../tgui/interfaces/CargoImportConsole.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tgui/packages/tgui/interfaces/CargoImportConsole.jsx b/tgui/packages/tgui/interfaces/CargoImportConsole.jsx index 66d508225a3..2854aee9828 100644 --- a/tgui/packages/tgui/interfaces/CargoImportConsole.jsx +++ b/tgui/packages/tgui/interfaces/CargoImportConsole.jsx @@ -81,7 +81,7 @@ export const CargoImportConsole = (props) => { key={item.ref} onClick={() => setArmament(item.ref)} > - { item.ref === weapon && ( - - src= - {`data:image/jpeg;base64,${item.icon}`} - height={'100%'} width={'100%'} style= - {{ + + /> {item.description} {!!cant_buy_restricted && !!item.restricted && ( From 86b000b3733db336c9ffe4f7796c86f81aecc802 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 16:36:06 +0100 Subject: [PATCH 029/188] Automatic changelog for PR #25730 [ci skip] --- html/changelogs/AutoChangeLog-pr-25730.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25730.yml diff --git a/html/changelogs/AutoChangeLog-pr-25730.yml b/html/changelogs/AutoChangeLog-pr-25730.yml new file mode 100644 index 00000000000..26d3bf9816a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25730.yml @@ -0,0 +1,4 @@ +author: "Paxilmaniac" +delete-after: True +changes: + - qol: "The sol rifles have had their names changed so that they suck less to refer to as characters that don't speak french-afrikaans (coming 2023)" \ No newline at end of file From ca67e0f159c9ab6417351c1c6b0b10929f606efb Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 16:38:20 +0100 Subject: [PATCH 030/188] Automatic changelog for PR #25743 [ci skip] --- html/changelogs/AutoChangeLog-pr-25743.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25743.yml diff --git a/html/changelogs/AutoChangeLog-pr-25743.yml b/html/changelogs/AutoChangeLog-pr-25743.yml new file mode 100644 index 00000000000..5a008e88910 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25743.yml @@ -0,0 +1,4 @@ +author: "vinylspiders" +delete-after: True +changes: + - bugfix: "fixes company imports bluescreen" \ No newline at end of file From e1b5e0c4302145039d26a44298dd0b26ca517e8e Mon Sep 17 00:00:00 2001 From: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com> Date: Wed, 20 Dec 2023 11:11:32 -0500 Subject: [PATCH 031/188] Reworks, resprites, or in a few cases deletes, shotgun shells including but not limited to skyrat shotgun shells (#25352) * oh yeah baby * fixes the cargo company too * fixes stuff that was missing * oops thats invisible * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Update modular_skyrat/modules/shotgunrebalance/code/ammobox.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- .../code/armaments/_armament_primary.dm | 4 +- .../code/armaments/_armament_primary.dm | 14 +- .../code/armament_datums/vitezstvi_ammo.dm | 19 +- .../opposing_force/code/equipment/ammo.dm | 12 +- .../modules/shotgunrebalance/code/ammobox.dm | 47 ++-- .../modules/shotgunrebalance/code/shotgun.dm | 211 ++++++------------ .../shotgunrebalance/icons/projectiles.dmi | Bin 0 -> 815 bytes 7 files changed, 115 insertions(+), 192 deletions(-) create mode 100644 modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm index e2ef34a2972..26ee34d9018 100644 --- a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm +++ b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm @@ -93,8 +93,8 @@ /datum/armament_entry/assault_operatives/primary/shotgun_ammo/flechette item_type = /obj/item/ammo_box/advanced/s12gauge/flechette -/datum/armament_entry/assault_operatives/primary/shotgun_ammo/hollowpoint - item_type = /obj/item/ammo_box/advanced/s12gauge/hp +/datum/armament_entry/assault_operatives/primary/shotgun_ammo/magnum + item_type = /obj/item/ammo_box/advanced/s12gauge/magnum /datum/armament_entry/assault_operatives/primary/shotgun_ammo/beehive item_type = /obj/item/ammo_box/advanced/s12gauge/beehive diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm index f32223088d4..49c78d96917 100644 --- a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm +++ b/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm @@ -70,13 +70,13 @@ /obj/item/storage/box/ammo_box/shotgun_12g /obj/item/storage/box/ammo_box/shotgun_12g/PopulateContents() - var/funshell = pick(/obj/item/ammo_box/advanced/s12gauge/pt20, - /obj/item/ammo_box/advanced/s12gauge/incendiary, - /obj/item/ammo_box/advanced/s12gauge/flechette, - /obj/item/ammo_box/advanced/s12gauge/beehive, - /obj/item/ammo_box/advanced/s12gauge/iceblox, - /obj/item/ammo_box/advanced/s12gauge/rip, - ) + var/funshell = pick( + /obj/item/ammo_box/advanced/s12gauge/incendiary, + /obj/item/ammo_box/advanced/s12gauge/flechette, + /obj/item/ammo_box/advanced/s12gauge/beehive, + /obj/item/ammo_box/advanced/s12gauge/antitide, + /obj/item/ammo_box/advanced/s12gauge/express, + ) new /obj/item/ammo_box/advanced/s12gauge/magnum(src) new /obj/item/ammo_box/advanced/s12gauge(src) new funshell(src) diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm b/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm index 4c889e334cd..12a456573e8 100644 --- a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm +++ b/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm @@ -128,31 +128,36 @@ /datum/armament_entry/company_import/vitezstvi/shot_shells/slugs item_type = /obj/item/ammo_box/advanced/s12gauge - description = "A box of 15 slug shells, large singular shots that pack a punch." /datum/armament_entry/company_import/vitezstvi/shot_shells/buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/buckshot - description = "A box of 15 buckshot shells, a modest spread of weaker projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/beanbag_slugs item_type = /obj/item/ammo_box/advanced/s12gauge/bean - description = "A box of 15 beanbag slug shells, large singular beanbags that pack a less-lethal punch." /datum/armament_entry/company_import/vitezstvi/shot_shells/rubbershot item_type = /obj/item/ammo_box/advanced/s12gauge/rubber - description = "A box of 15 rubbershot shells, a modest spread of weaker less-lethal projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/magnum_buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/magnum - description = "A box of 15 magnum buckshot shells, a wider spread of larger projectiles." /datum/armament_entry/company_import/vitezstvi/shot_shells/express_buckshot item_type = /obj/item/ammo_box/advanced/s12gauge/express - description = "A box of 15 express buckshot shells, a tighter spread of smaller projectiles." + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hunter_slug + item_type = /obj/item/ammo_box/advanced/s12gauge/hunter + +/datum/armament_entry/company_import/vitezstvi/shot_shells/flechettes + item_type = /obj/item/ammo_box/advanced/s12gauge/flechette + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hornet_nest + item_type = /obj/item/ammo_box/advanced/s12gauge/beehive + +/datum/armament_entry/company_import/vitezstvi/shot_shells/stardust + item_type = /obj/item/ammo_box/advanced/s12gauge/antitide /datum/armament_entry/company_import/vitezstvi/shot_shells/confetti item_type = /obj/item/ammo_box/advanced/s12gauge/honk - description = "A box of 35 confetti shells, firing a spread of harmless confetti everywhere, yippie!" // Boxes of kiboko launcher ammo diff --git a/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm b/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm index 46734bcc952..32ec19d2811 100644 --- a/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm +++ b/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm @@ -49,13 +49,13 @@ description = "A box of slug shotgun shells, fires only one big fuck-off bullet that wounds extra hard." item_type = /obj/item/ammo_box/advanced/s12gauge -/datum/opposing_force_equipment/ammo_exotic/hp_slug - description = "A box of hollow point slug shotgun shells, annihilates unarmoured combatants." - item_type = /obj/item/ammo_box/advanced/s12gauge/hp +/datum/opposing_force_equipment/ammo_exotic/hornet + description = "A box of hornet's nest shotgun shells, a less-lethal pellet spread that bounces towards targets off of walls." + item_type = /obj/item/ammo_box/advanced/s12gauge/beehive -/datum/opposing_force_equipment/ammo_exotic/ap_slug - description = "A box of armour piercing slug shotgun shells, are armoured targets your number one concern? With these shells you'll hardly remember they're wearing any." - item_type = /obj/item/ammo_box/advanced/s12gauge/pt20 +/datum/opposing_force_equipment/ammo_exotic/stardust + description = "A box of stardust shotgun shells, a less-lethal spread of embedding electrodes that tire targets that move." + item_type = /obj/item/ammo_box/advanced/s12gauge/antitide /datum/opposing_force_equipment/ammo_exotic/a357phasic description = "A speedloader of .357 that ignores structure collision at the cost of some damage." diff --git a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm b/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm index ab769454bd7..c2d98779313 100644 --- a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm +++ b/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm @@ -1,6 +1,6 @@ /obj/item/ammo_box/advanced/s12gauge name = "Slug ammo box" - desc = "A box of shotgun shells." + desc = "A box of 15 slug shells. Large, singular shots that pack a punch." icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi' icon_state = "slug" ammo_type = /obj/item/ammo_casing/shotgun @@ -9,90 +9,77 @@ /obj/item/ammo_box/advanced/s12gauge/buckshot name = "Buckshot ammo box" + desc = "A box of 15 buckshot shells. These have a modest spread of weaker projectiles." icon_state = "buckshot" ammo_type = /obj/item/ammo_casing/shotgun/buckshot max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/rubber name = "Rubbershot ammo box" + desc = "A box of 15 rubbershot shells. These have a modest spread of weaker, less-lethal projectiles." icon_state = "rubber" ammo_type = /obj/item/ammo_casing/shotgun/rubbershot max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/bean name = "Beanbag Slug ammo box" + desc = "A box of 15 beanbag slug shells. These are large, singular beanbags that pack a less-lethal punch." icon_state = "bean" ammo_type = /obj/item/ammo_casing/shotgun/beanbag max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/magnum - name = "Magnum Buckshot ammo box" + name = "Magnum blockshot ammo box" + desc = "A box of 15 magnum blockshot shells. The size of the pellet is larger in diameter than the typical shot, but there are less of them inside each shell." icon_state = "magnum" ammo_type = /obj/item/ammo_casing/shotgun/magnum max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/express - name = "Express Buckshot ammo box" + name = "Express pelletshot ammo box" + desc = "A box of 15 express pelletshot shells. The size of the pellet is smaller in diameter than the typical shot, but there are more of them inside each shell." icon_state = "express" ammo_type = /obj/item/ammo_casing/shotgun/express max_ammo = 15 -/obj/item/ammo_box/advanced/s12gauge/hp - name = "Hollow Point Slug ammo box" - icon_state = "hollowpoint" - ammo_type = /obj/item/ammo_casing/shotgun/hp - max_ammo = 15 - /obj/item/ammo_box/advanced/s12gauge/hunter - name = "Hunter Buckshot ammo box" + name = "Hunter slug ammo box" + desc = "A box of 15 hunter slug shells. These shotgun slugs excel at damaging the local fauna." icon_state = "hunter" ammo_type = /obj/item/ammo_casing/shotgun/hunter max_ammo = 15 -/obj/item/ammo_box/advanced/s12gauge/pt20 - name = "PT-20 Armor Piercing Slug ammo box" - icon_state = "apshell" - ammo_type = /obj/item/ammo_casing/shotgun/pt20 - max_ammo = 15 - -/obj/item/ammo_box/advanced/s12gauge/rip - name = "RIP Slug ammo box" - icon_state = "rip" - ammo_type = /obj/item/ammo_casing/shotgun/rip - max_ammo = 15 - /obj/item/ammo_box/advanced/s12gauge/flechette name = "Flechette ammo box" + desc = "A box of 15 flechette shells. Each shell contains a small group of tumbling blades that excel at causing terrible wounds." icon_state = "flechette" ammo_type = /obj/item/ammo_casing/shotgun/flechette max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/beehive - name = "B3-HVE 'Beehive' ammo box" + name = "Hornet's nest ammo box" + desc = "A box of 15 hornet's nest shells. These are less-lethal shells that will bounce off walls and direct themselves toward nearby targets." icon_state = "beehive" ammo_type = /obj/item/ammo_casing/shotgun/beehive max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/antitide - name = "4NT1-TD3 'Suppressor' ammo box" + name = "Stardust ammo box" + desc = "A box of 15 express pelletshot shells. These are less-lethal and will embed in targets, causing pain on movement." icon_state = "antitide" ammo_type = /obj/item/ammo_casing/shotgun/antitide max_ammo = 15 -/obj/item/ammo_box/advanced/s12gauge/iceblox - name = "Iceshot ammo box" - icon_state = "iceblox" - ammo_type = /obj/item/ammo_casing/shotgun/iceblox - max_ammo = 15 - /obj/item/ammo_box/advanced/s12gauge/incendiary name = "Incendiary Slug ammo box" + desc = "A box of 15 incendiary slug shells. These will ignite targets and leave a trail of fire behind them." icon_state = "incendiary" ammo_type = /obj/item/ammo_casing/shotgun/incendiary max_ammo = 15 /obj/item/ammo_box/advanced/s12gauge/honk name = "Confetti ammo box" + desc = "A box of 35 shotgun shells. These ones contain harmless confetti, yippie!" icon_state = "honk" ammo_type = /obj/item/ammo_casing/shotgun/honk max_ammo = 35 diff --git a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm index 853ac892aa1..c1ad1e6c082 100644 --- a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm +++ b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm @@ -1,25 +1,18 @@ #define AMMO_MATS_SHOTGUN list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4) // not quite as thick as a half-sheet -#define AMMO_MATS_SHOTGUN_PT20 list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3,\ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.5,\ - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.5) // plastitanium slug - -#define AMMO_MATS_SHOTGUN_RIP list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3,\ - /datum/material/bronze = SMALL_MATERIAL_AMOUNT * 1) // the bronze is because real RIP shells are made with copper, apparently - #define AMMO_MATS_SHOTGUN_FLECH list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 2) + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) #define AMMO_MATS_SHOTGUN_HIVE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1) #define AMMO_MATS_SHOTGUN_TIDE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1,\ - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 1) // i mean. i - i guess? + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\ + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1) -#define AMMO_MATS_SHOTGUN_TEMP list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ - /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2) // covers both iceblox and incendiary +#define AMMO_MATS_SHOTGUN_PLASMA list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\ + /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2) /obj/item/ammo_casing/shotgun icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi' @@ -43,7 +36,7 @@

\ INCENDIARY: Leaves a trail of fire when shot, sets targets aflame." advanced_print_req = TRUE - custom_materials = AMMO_MATS_SHOTGUN_TEMP + custom_materials = AMMO_MATS_SHOTGUN_PLASMA /obj/item/ammo_casing/shotgun/techshell can_be_printed = FALSE // techshell... casing! so not really usable on its own but if you're gonna make these go raid a seclathe. @@ -91,105 +84,74 @@ sacrificing individual pellet strength for sheer stopping power in what's best described as \"spitting distance\".\

\ HORNET'S NEST: Fire an overwhelming amount of projectiles in a single shot." - // ...you know what if you're confident you can get up in there, you might as well get to use it if you're able to print Weird Shells. - -/obj/item/ammo_casing/shotgun/hp - name = "hollow point slug" - desc = "A 12 gauge hollow point slug purpose built for unarmored targets." - icon_state = "stunshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/hp - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/hp - name = "12g hollow point shotgun slug" - damage = 60 - wound_bonus = 0 - bare_wound_bonus = 40 - weak_against_armour = TRUE - -/obj/item/ammo_casing/shotgun/pt20 - name = "PT-20 armor piercing slug" - desc = "A 12 gauge plastitanium slug purpose built to penetrate armored targets." - icon_state = "apshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/pt20 - custom_materials = AMMO_MATS_SHOTGUN_PT20 - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/pt20 - name = "armor piercing shotgun slug" - damage = 40 - armour_penetration = 50 - -/obj/item/ammo_casing/shotgun/rip - name = "RIP shotgun slug" - desc = "A Radically Invasive Projectile Slug that is designed to cause massive damage against unarmored targets by embedding inside them." - icon_state = "ripshell" - projectile_type = /obj/projectile/bullet/shotgun_slug/rip - custom_materials = AMMO_MATS_SHOTGUN_RIP - advanced_print_req = TRUE - -/obj/projectile/bullet/shotgun_slug/rip - name = "RIP shotgun slug" - damage = 50 - weak_against_armour = TRUE - embedding = list(embed_chance=80, pain_chance=40, fall_chance=5, jostle_chance=5, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.5, pain_mult=5, rip_time=30) + can_be_printed = FALSE /obj/item/ammo_casing/shotgun/buckshot name = "buckshot shell" desc = "A 12 gauge buckshot shell." icon_state = "gshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot - pellets = 8 //Original: 6 || 8 x 8 = 64 Damage Potential, 34 Damage at 4 tile range + pellets = 8 // 8 * 6 for 48 damage if every pellet hits, we want to keep lethal shells ~50 damage variance = 25 /obj/projectile/bullet/pellet/shotgun_buckshot name = "buckshot pellet" - damage = 8//7.5 - wound_bonus = 5 - bare_wound_bonus = 5 - wound_falloff_tile = -2.5 // low damage + additional dropoff will already curb wounding potential anything past point blank - weak_against_armour = TRUE // Did you knew shotguns are actually shit against armor? + damage = 6 + weak_against_armour = TRUE /obj/item/ammo_casing/shotgun/rubbershot name = "rubber shot" desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." icon_state = "rshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot - pellets = 7 + pellets = 6 // 6 * 10 for 60 stamina damage, + some small amount of brute, we want to keep less lethal shells ~60 variance = 20 harmful = FALSE +/obj/projectile/bullet/pellet/shotgun_rubbershot + weak_against_armour = TRUE + stamina = 10 + /obj/item/ammo_casing/shotgun/magnum - name = "magnum buckshot shell" - desc = "A 12 gauge buckshot shell that fires bigger pellets but has more spread. It is able to contend against armored targets." + name = "magnum blockshot shell" + desc = "A 12 gauge shell that fires fewer, larger pellets than buckshot. A favorite of SolFed anti-piracy enforcers, \ + especially against the likes of vox." icon_state = "magshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/magnum - pellets = 6 //6 x 10 = 60 Damage Potential, 27 Damage at 4 tile range - variance = 30 + pellets = 4 // Half as many pellets for twice the damage each pellet, same overall damage as buckshot + variance = 20 advanced_print_req = TRUE /obj/projectile/bullet/pellet/shotgun_buckshot/magnum - name = "magnum buckshot pellet" - damage = 10 - wound_bonus = 8 - weak_against_armour = FALSE + name = "magnum blockshot pellet" + damage = 12 + wound_bonus = 10 + +/obj/projectile/bullet/pellet/shotgun_buckshot/magnum/Initialize(mapload) + . = ..() + transform = transform.Scale(1.25, 1.25) /obj/item/ammo_casing/shotgun/express - name = "express buckshot shell" - desc = "A 12 gauge buckshot shell that has tighter spread and smaller projectiles." + name = "express pelletshot shell" + desc = "A 12 gauge shell that fires more and smaller projectiles than buckshot. Considered taboo to speak about \ + openly near teshari, for reasons you would be personally blessed to not know at least some of." icon_state = "expshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/express - pellets = 9 //6 x 9 = 51 Damage Potential, 33 Damage at 4 tile range - variance = 20 //tighter spread + pellets = 12 // 1.3x The pellets for 0.6x the damage, same overall damage as buckshot + variance = 30 // Slightly wider spread than buckshot /obj/projectile/bullet/pellet/shotgun_buckshot/express name = "express buckshot pellet" - damage = 6 - speed = 0.6 + damage = 4 + wound_bonus = 0 + +/obj/projectile/bullet/pellet/shotgun_buckshot/express/Initialize(mapload) + . = ..() + transform = transform.Scale(0.75, 0.75) /obj/item/ammo_casing/shotgun/flechette name = "flechette shell" - desc = "A 12 gauge flechette shell that specializes in ripping through armor." + desc = "A 12 gauge flechette shell that specializes in ripping unarmored targets apart." icon_state = "fshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/flechette pellets = 8 //8 x 6 = 48 Damage Potential @@ -199,35 +161,41 @@ /obj/projectile/bullet/pellet/shotgun_buckshot/flechette name = "flechette" + icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "flechette" damage = 6 - weak_against_armour = FALSE //Were here to rip armor - armour_penetration = 40 - wound_bonus = 9 - bare_wound_bonus = 0 + wound_bonus = 10 + bare_wound_bonus = 20 sharpness = SHARP_EDGED //Did you knew flechettes fly sideways into people +/obj/projectile/bullet/pellet/shotgun_buckshot/flechette/Initialize(mapload) + . = ..() + SpinAnimation() + /obj/item/ammo_casing/shotgun/beehive - name = "B3-HVE 'Beehive' shell" - desc = "A highly experimental non-lethal shell filled with smart nanite pellets that re-aim themselves when bouncing off from surfaces. However they are not able to make out friend from foe." + name = "hornet shell" + desc = "A less-lethal 12 gauge shell that fires four pellets capable of bouncing off nearly any surface \ + and re-aiming themselves toward the nearest target. They will, however, go for any target nearby." icon_state = "cnrshell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive - pellets = 6 - variance = 20 + pellets = 4 + variance = 15 fire_sound = 'sound/weapons/taser.ogg' harmful = FALSE custom_materials = AMMO_MATS_SHOTGUN_HIVE advanced_print_req = TRUE /obj/projectile/bullet/pellet/shotgun_buckshot/beehive - name = "beehive pellet" + name = "hornet flechette" + icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "hornet" damage = 4 - stamina = 10 + stamina = 15 damage_falloff_tile = 0.1 stamina_falloff_tile = 0.1 wound_bonus = -5 bare_wound_bonus = 5 wound_falloff_tile = 0 - weak_against_armour = TRUE sharpness = NONE ricochets_max = 5 ricochet_chance = 200 @@ -238,11 +206,11 @@ ricochet_incidence_leeway = 0 //nanomachines son /obj/item/ammo_casing/shotgun/antitide - name = "4NT1-TD3 'Suppressor' shell" + name = "stardust shell" desc = "A highly experimental shell filled with nanite electrodes that will embed themselves in soft targets. The electrodes are charged from kinetic movement which means moving targets will get punished more." icon_state = "lasershell" projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/antitide - pellets = 5 + pellets = 8 // 8 * 7 for 56 stamina damage, plus whatever the embedded shells do variance = 30 harmful = FALSE fire_sound = 'sound/weapons/taser.ogg' @@ -251,8 +219,10 @@ /obj/projectile/bullet/pellet/shotgun_buckshot/antitide name = "electrode" - damage = 4 - stamina = 6 + icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi' + icon_state = "stardust" + damage = 2 + stamina = 8 damage_falloff_tile = 0.2 stamina_falloff_tile = 0.3 wound_bonus = 0 @@ -260,66 +230,27 @@ stutter = 3 SECONDS jitter = 5 SECONDS eyeblur = 1 SECONDS - weak_against_armour = TRUE sharpness = NONE range = 8 - icon_state = "spark" embedding = list(embed_chance=70, pain_chance=25, fall_chance=15, jostle_chance=80, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.9, pain_mult=2, rip_time=10) -/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/Initialize(mapload) - . = ..() - SpinAnimation() - transform *= 0.25 - /obj/projectile/bullet/pellet/shotgun_buckshot/antitide/on_range() do_sparks(1, TRUE, src) ..() -/obj/item/ammo_casing/shotgun/iceblox - name = "Iceshot shell" - desc = "A highly experimental shell filled with nanites that will lower the body temperature of hit targets." - icon_state = "tshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/iceblox - custom_materials = AMMO_MATS_SHOTGUN_TEMP - pellets = 5 - variance = 20 - advanced_print_req = TRUE - -/obj/projectile/bullet/pellet/shotgun_buckshot/iceblox //see /obj/projectile/temp for the original code - name = "iceblox pellet" - damage_falloff_tile = 0.35 - damage = 5 - weak_against_armour = TRUE - var/temperature = 30 - -/obj/projectile/bullet/pellet/shotgun_buckshot/iceblox/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(isliving(target)) - var/mob/living/UnluckyBastard = target - UnluckyBastard.adjust_bodytemperature(((100-blocked)/100)*(temperature - UnluckyBastard.bodytemperature)) - /obj/item/ammo_casing/shotgun/hunter - name = "hunter buckshot shell" - desc = "A 12 gauge buckshot shell that fires specially charged pellets that deal extra damage to simpler beings." + name = "hunter slug shell" + desc = "A 12 gauge slug shell that fires specially designed slugs that deal extra damage to the local planetary fauna" icon_state = "huntershell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/hunter - pellets = 6 // 6 x 30 = 180 damage vs simples - variance = 30 + projectile_type = /obj/projectile/bullet/shotgun_slug/hunter -/obj/projectile/bullet/pellet/shotgun_buckshot/hunter - name = "hunter buckshot pellet" - damage = 5 - wound_bonus = 0 - weak_against_armour = FALSE - /// Bonus force dealt against certain factions - var/faction_bonus_force = 25 - /// Any mob with a faction that exists in this list will take bonus damage/effects - var/list/nemesis_path = /mob/living/simple_animal +/obj/projectile/bullet/shotgun_slug/hunter + name = "12g hunter slug" + damage = 20 -/obj/projectile/bullet/pellet/shotgun_buckshot/hunter/prehit_pierce(mob/living/target, mob/living/carbon/human/user) - if(istype(target, nemesis_path)) - damage += faction_bonus_force - .=..() +/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 5) /obj/projectile/bullet/pellet/shotgun_improvised weak_against_armour = TRUE // We will not have Improvised are Better 2.0 diff --git a/modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi b/modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..be56385841f037236486d36c50200a63fcdeef13 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoldD1^N?cNllZ!G7N;32F7#J$% z1cwzAm45#cT=4Ph6D@CDt#fD22X6>9xM=*~k&m`uIdlGer#t83Q}eg+743_eHeL30;H9_k zYGiWqb8D^2e%A8K+wxUOfASRHxu?kfMSpnR({;A@OSpsfp7njL$aT?tU(DTVzR>U6 zW7{VDt>M0``{L~D(&$|Wzi3Zfo@CD`W-tDC)A2(Zd5rFs@(?#c$%c=?UUwH>trD7+ zCA#wd8rd7)kAC)xc)iAZ^G}7JGp%n7=K%UCk2y>^*lAFRR63hIEk!Jxp@~8;rRM+!)Vk9FRl^ zs_Og8x1VSCnRIAAf5#)Cx9ihCt-Cm1q;4s^*>?yVzxNEVcr*R zZ=;Asd-v)pK9~CI8Tf+h!q*R9-SXcbSua Date: Wed, 20 Dec 2023 17:11:56 +0100 Subject: [PATCH 032/188] Automatic changelog for PR #25352 [ci skip] --- html/changelogs/AutoChangeLog-pr-25352.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25352.yml diff --git a/html/changelogs/AutoChangeLog-pr-25352.yml b/html/changelogs/AutoChangeLog-pr-25352.yml new file mode 100644 index 00000000000..b1fa132116a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25352.yml @@ -0,0 +1,5 @@ +author: "Paxilmaniac" +delete-after: True +changes: + - balance: "Shotgun shells, ESPECIALLY skyrat's shotgun shells, have been rebalanced to not either be useless or insane in every situation, see pr for details." + - image: "New sprites for some projectiles, like flechettes and whatnot" \ No newline at end of file From 9e4bf0561a2c1b819ef50e5c05903e5bd43aa390 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:11:59 -0500 Subject: [PATCH 033/188] [MODULAR] Fixes loadout item duplicate items bug (#25746) Fixes loadout item duplicate items bug --- .../loadout_items/donator/personal/donator_personal.dm | 6 ------ .../modules/loadouts/loadout_items/loadout_datum_glasses.dm | 2 +- .../modules/loadouts/loadout_items/loadout_datum_suit.dm | 2 +- .../loadouts/loadout_items/under/loadout_datum_under.dm | 4 ++-- tgui/packages/tgui/interfaces/LoadoutManager.tsx | 2 +- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm index 0f3d453df46..ce17c62539c 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm @@ -13,12 +13,6 @@ item_path = /obj/item/canvas/drawingtablet ckeywhitelist = list("thedragmeme") -/datum/loadout_item/shoes/heeled_jackboots - name = "High-heel Jackboots" - item_path = /obj/item/clothing/shoes/jackboots/heel -// ckeywhitelist = list("thedragmeme") -//As they requested, it's properly public now. - /datum/loadout_item/suit/furcoat name = "Leather coat with fur" item_path = /obj/item/clothing/suit/furcoat diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm index 13dd0118858..f8f74889b50 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm @@ -144,7 +144,7 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla */ /datum/loadout_item/glasses/medicpatch - name = "Medical Eyepatch" + name = "Medical Eyepatch (Skyrat)" item_path = /obj/item/clothing/glasses/hud/eyepatch/med restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC, JOB_ORDERLY, JOB_CORONER) diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm index a153c2de271..3ad1e156db4 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su item_path = /obj/item/clothing/suit/koreacoat /datum/loadout_item/suit/czech - name = "Modern Winter Coat" + name = "Czech Winter Coat" item_path = /obj/item/clothing/suit/modernwintercoatthing /datum/loadout_item/suit/mantella diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm index bb1a6699d58..46ca5d512b8 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm @@ -145,7 +145,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ restricted_roles = list(JOB_PARAMEDIC) /datum/loadout_item/under/jumpsuit/paramed_light_skirt - name = "Light Paramedic Uniform" + name = "Light Paramedic Skirt" item_path = /obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt restricted_roles = list(JOB_PARAMEDIC) @@ -387,7 +387,7 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/dress/skirt/skyrat/red_skirt /datum/loadout_item/under/miscellaneous/black_skirt - name = "Black Skirt" + name = "Black Skirt (Skyrat)" item_path = /obj/item/clothing/under/dress/skirt/skyrat/black_skirt /datum/loadout_item/under/miscellaneous/swept_skirt diff --git a/tgui/packages/tgui/interfaces/LoadoutManager.tsx b/tgui/packages/tgui/interfaces/LoadoutManager.tsx index 7e6321a30f8..a4997269da6 100644 --- a/tgui/packages/tgui/interfaces/LoadoutManager.tsx +++ b/tgui/packages/tgui/interfaces/LoadoutManager.tsx @@ -94,7 +94,7 @@ export const LoadoutManager = (props) => { > {selectedTab.contents.map((item) => ( - + {item.name} From c5433c8f964bcf57e9d5fcd536d643145c82376b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 20 Dec 2023 19:12:27 +0100 Subject: [PATCH 034/188] Automatic changelog for PR #25746 [ci skip] --- html/changelogs/AutoChangeLog-pr-25746.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25746.yml diff --git a/html/changelogs/AutoChangeLog-pr-25746.yml b/html/changelogs/AutoChangeLog-pr-25746.yml new file mode 100644 index 00000000000..8d3e2382188 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25746.yml @@ -0,0 +1,4 @@ +author: "vinylspiders" +delete-after: True +changes: + - bugfix: "fixed a bug where certain loadout menu items would duplicate themselves across tabs" \ No newline at end of file From 49b7f8445ed78dce6f2cf0b5fdcffdb364ce9594 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:44:50 -0500 Subject: [PATCH 035/188] Creates a unit test for loadout item duplicates (#25747) * Creates a unit test for loadout item duplicates * Update loadout_dupes.dm * Update loadout_dupes.dm * Update loadout_dupes.dm * Update loadout_datum_under.dm * I'm going to put the cargo shorts under misc/under * Revert "I'm going to put the cargo shorts under misc/under" This reverts commit e4cdbd80e42424091ad76be67502ced2cbadec13. --- code/modules/unit_tests/_unit_tests.dm | 1 + code/modules/unit_tests/~skyrat/loadout_dupes.dm | 14 ++++++++++++++ .../loadout_items/under/loadout_datum_under.dm | 8 -------- 3 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 code/modules/unit_tests/~skyrat/loadout_dupes.dm diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 56c10327441..491edbcd580 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -275,6 +275,7 @@ #include "worn_icons.dm" // SKYRAT EDIT START #include "~skyrat\automapper.dm" +#include "~skyrat\loadout_dupes.dm" #include "~skyrat\opposing_force.dm" // SKYRAT EDIT END // END_INCLUDE diff --git a/code/modules/unit_tests/~skyrat/loadout_dupes.dm b/code/modules/unit_tests/~skyrat/loadout_dupes.dm new file mode 100644 index 00000000000..23bfe368905 --- /dev/null +++ b/code/modules/unit_tests/~skyrat/loadout_dupes.dm @@ -0,0 +1,14 @@ +///Checks that loadout items' item_paths are unique to the category of loadout item it belongs to +/datum/unit_test/loadout_dupes + +/datum/unit_test/loadout_dupes/Run() + var/list/item_paths = list() + for(var/datum/loadout_item/item as anything in subtypesof(/datum/loadout_item)) + var/loadout_item_category = initial(item.category) + var/item_path = initial(item.item_path) + if(item_paths[item_path] == loadout_item_category) + TEST_FAIL("Duplicate loadout item! [item_path] is already being used by [item].") + if(isnull(item_path)) // can be null, for subcategories of loadout items + continue + + item_paths[item_path] = loadout_item_category diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm index 46ca5d512b8..14aa3ca4b44 100644 --- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm +++ b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm @@ -179,10 +179,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/rank/cargo/tech restricted_roles = list(JOB_CARGO_TECHNICIAN, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT) -/datum/loadout_item/under/jumpsuit/cargo/shorts - name = "Cargo Technician's Shorts" - item_path = /obj/item/clothing/under/rank/cargo/tech/alt - /datum/loadout_item/under/jumpsuit/cargo/skirt name = "Cargo Technician's Skirt" item_path = /obj/item/clothing/under/rank/cargo/tech/skirt @@ -747,10 +743,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ name = "Navy Suit" item_path = /obj/item/clothing/under/suit/navy -/datum/loadout_item/under/formal/maid_outfit - name = "Maid Outfit" - item_path = /obj/item/clothing/under/costume/maid - /datum/loadout_item/under/formal/maid_uniform name = "Maid Uniform" item_path = /obj/item/clothing/under/rank/civilian/janitor/maid From a9db2662ef9695a4fb6ac92e04a5d9a2b6007ff8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:06:45 +0100 Subject: [PATCH 036/188] [MIRROR] Fixes some missed tgui files that needed prettier run on them [MDB IGNORE] (#25756) * Fixes some missed tgui files that needed prettier run on them (#80466) ## About The Pull Request that's it. ## Changelog Nothing player facing * Fixes some missed tgui files that needed prettier run on them --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- tgui/packages/tgui/interfaces/OutfitEditor.jsx | 2 +- tgui/packages/tgui/interfaces/Safe.jsx | 2 +- tgui/packages/tgui/interfaces/SelectEquipment.jsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/interfaces/OutfitEditor.jsx b/tgui/packages/tgui/interfaces/OutfitEditor.jsx index 66a40091417..f277956a7aa 100644 --- a/tgui/packages/tgui/interfaces/OutfitEditor.jsx +++ b/tgui/packages/tgui/interfaces/OutfitEditor.jsx @@ -1,5 +1,5 @@ import { useBackend } from '../backend'; -import { Box, Button, Icon, Section, Stack, Image } from '../components'; +import { Box, Button, Icon, Image, Section, Stack } from '../components'; import { Window } from '../layouts'; export const OutfitEditor = (props) => { diff --git a/tgui/packages/tgui/interfaces/Safe.jsx b/tgui/packages/tgui/interfaces/Safe.jsx index 5a89f8ca94c..a9f9e7469f6 100644 --- a/tgui/packages/tgui/interfaces/Safe.jsx +++ b/tgui/packages/tgui/interfaces/Safe.jsx @@ -2,7 +2,7 @@ import { Fragment } from 'react'; import { resolveAsset } from '../assets'; import { useBackend } from '../backend'; -import { Box, Button, Icon, Section, Image } from '../components'; +import { Box, Button, Icon, Image, Section } from '../components'; import { Window } from '../layouts'; export const Safe = (properties) => { diff --git a/tgui/packages/tgui/interfaces/SelectEquipment.jsx b/tgui/packages/tgui/interfaces/SelectEquipment.jsx index f9fac18df56..b6a4146797d 100644 --- a/tgui/packages/tgui/interfaces/SelectEquipment.jsx +++ b/tgui/packages/tgui/interfaces/SelectEquipment.jsx @@ -7,11 +7,11 @@ import { Box, Button, Icon, + Image, Input, Section, Stack, Tabs, - Image, } from '../components'; import { Window } from '../layouts'; From 2bc004f447fa2fa20bd7f3eb11c2fafedddbfdff Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:06:52 +0100 Subject: [PATCH 037/188] [MIRROR] Fixes dropdowns not rendering the selection's displayText post-selection [MDB IGNORE] (#25755) * Fixes dropdowns not rendering the selection's displayText post-selection (#80464) ## About The Pull Request What it says on the tin. Dropdowns were displaying the `selection` instead of `displayText` after clicking an option. Note: this bug was only _noticeably_ affecting dropdowns whose `selection` differed from `displayText`. In the below example, the dropdown uses numeric indices for `selection` and a string for `displayText`. In those cases the `displayText` should take precedence, not the other way around.
From this ![XCsUpfbezj](https://github.com/tgstation/tgstation/assets/13398309/3fac640d-a4ac-488c-94de-5413a74b0836)
To this ![CvjsD6TmtW](https://github.com/tgstation/tgstation/assets/13398309/ec30cb11-11db-4a64-87ad-cef6add86f5b)
## Why It's Good For The Game Fixes a minor bug ## Changelog :cl: fix: fixes some dropdowns not displaying the right text after selecting something /:cl: * Fixes dropdowns not rendering the selection's displayText post-selection --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- tgui/packages/tgui/components/Dropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgui/packages/tgui/components/Dropdown.tsx b/tgui/packages/tgui/components/Dropdown.tsx index c015ac5dc22..f09653a6967 100644 --- a/tgui/packages/tgui/components/Dropdown.tsx +++ b/tgui/packages/tgui/components/Dropdown.tsx @@ -343,7 +343,7 @@ export class Dropdown extends Component { overflow: clipSelectedText ? 'hidden' : 'visible', }} > - {this.state.selected || displayText} + {displayText || this.state.selected} {nochevron || ( From 0fb7dd449a1c36685f6ed5bb5c30efa38ae77e01 Mon Sep 17 00:00:00 2001 From: nikothedude <59709059+nikothedude@users.noreply.github.com> Date: Wed, 20 Dec 2023 19:09:22 -0500 Subject: [PATCH 038/188] [NON-MODULAR] Fixes unspillable organs spilling on disembowel (#25754) adwawd --- code/modules/surgery/bodyparts/dismemberment.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index db92a901916..f1cdcba9c80 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -68,6 +68,10 @@ chest_owner.add_splatter_floor(chest_owner.loc) playsound(get_turf(chest_owner), 'sound/misc/splort.ogg', 80, TRUE) for(var/obj/item/organ/organ as anything in chest_owner.organs) + // SKYRAT EDIT START - Non-spillable organs + if(!organ.drop_when_organ_spilling) + continue + // SKYRAT EDIT END var/org_zone = check_zone(organ.zone) if(org_zone != BODY_ZONE_CHEST) continue From 62dc3612cb2d84ee08697eadae54d60f987de5ec Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:10:26 +0100 Subject: [PATCH 039/188] [MIRROR] Adds a captalization [MDB IGNORE] (#25750) * Adds a captalization (#80471) ## About The Pull Request I * Adds a captalization --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/__DEFINES/robots.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 42e6356d087..26b66f0de60 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -334,4 +334,4 @@ DEFINE_BITFIELD(janitor_mode_flags, list( #define MEDIBOT_VOICED_THIS_HURTS "This hurts, my pain is real!" #define MEDIBOT_VOICED_THE_END "Is this the end?" #define MEDIBOT_VOICED_NOOO "Nooo!" -#define MEDIBOT_VOICED_CHICKEN "LOOK AT ME?! i am a chicken." +#define MEDIBOT_VOICED_CHICKEN "LOOK AT ME?! I am a chicken." From 06fe638893223776ccadd13805bb24c7822d3261 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:15:20 +0100 Subject: [PATCH 040/188] Automatic changelog for PR #25755 [ci skip] --- html/changelogs/AutoChangeLog-pr-25755.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25755.yml diff --git a/html/changelogs/AutoChangeLog-pr-25755.yml b/html/changelogs/AutoChangeLog-pr-25755.yml new file mode 100644 index 00000000000..6188b2172e8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25755.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "fixes some dropdowns not displaying the right text after selecting something" \ No newline at end of file From b67be365c886d69cd2923821264bb9f957726b47 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:15:42 +0100 Subject: [PATCH 041/188] Automatic changelog for PR #25754 [ci skip] --- html/changelogs/AutoChangeLog-pr-25754.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25754.yml diff --git a/html/changelogs/AutoChangeLog-pr-25754.yml b/html/changelogs/AutoChangeLog-pr-25754.yml new file mode 100644 index 00000000000..5ca102ab2e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25754.yml @@ -0,0 +1,4 @@ +author: "nikothedude" +delete-after: True +changes: + - bugfix: "Unspillable organs no longer spill" \ No newline at end of file From 12eafb79605641d24ef89fcd41fede585f09a077 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 21 Dec 2023 00:44:47 +0000 Subject: [PATCH 042/188] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-25352.yml | 5 --- html/changelogs/AutoChangeLog-pr-25439.yml | 6 ---- html/changelogs/AutoChangeLog-pr-25490.yml | 5 --- html/changelogs/AutoChangeLog-pr-25559.yml | 4 --- html/changelogs/AutoChangeLog-pr-25712.yml | 5 --- html/changelogs/AutoChangeLog-pr-25730.yml | 4 --- html/changelogs/AutoChangeLog-pr-25743.yml | 4 --- html/changelogs/AutoChangeLog-pr-25744.yml | 4 --- html/changelogs/AutoChangeLog-pr-25746.yml | 4 --- html/changelogs/AutoChangeLog-pr-25754.yml | 4 --- html/changelogs/AutoChangeLog-pr-25755.yml | 4 --- html/changelogs/archive/2023-12.yml | 37 ++++++++++++++++++++++ 12 files changed, 37 insertions(+), 49 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-25352.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25439.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25490.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25559.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25712.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25730.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25743.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25744.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25746.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25754.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-25755.yml diff --git a/html/changelogs/AutoChangeLog-pr-25352.yml b/html/changelogs/AutoChangeLog-pr-25352.yml deleted file mode 100644 index b1fa132116a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25352.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Paxilmaniac" -delete-after: True -changes: - - balance: "Shotgun shells, ESPECIALLY skyrat's shotgun shells, have been rebalanced to not either be useless or insane in every situation, see pr for details." - - image: "New sprites for some projectiles, like flechettes and whatnot" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25439.yml b/html/changelogs/AutoChangeLog-pr-25439.yml deleted file mode 100644 index c47128d686f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25439.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Nerev4r" -delete-after: True -changes: - - rscadd: "Due to increased availability of calcium supplements in Sector 13 due to Deep Spacer lobbying, snailpeople have found their shells to be more suited towards protection of themselves and their recently-discovered-to-be-binary hearts in a combat scenario." - - rscadd: "Snailpeople have been invited to recent EVA training sessions, and have learned to attach themselves to the floors if gravity generators go out; who'd have thunk it?" - - bugfix: "Snailpeople no longer benefit from Settler's equipment load reduction while crawling. I could not think of a funny caption for this." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25490.yml b/html/changelogs/AutoChangeLog-pr-25490.yml deleted file mode 100644 index aa19906705c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25490.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Paxilmaniac" -delete-after: True -changes: - - balance: "SolFed response team equipment has been changed around a bit with the new armor and whatnot." - - image: "SolFed response teams (and cargo imports) can now see a new set of SolFed uniforms, one for peacekeepers and one for EMTs. No longer do they have to dress as wild west larpers, or half life HECU." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25559.yml b/html/changelogs/AutoChangeLog-pr-25559.yml deleted file mode 100644 index caebbb3a80e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25559.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "KannaLisvern" -delete-after: True -changes: - - rscadd: "Added a new ERP emote. *lewdmoan" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25712.yml b/html/changelogs/AutoChangeLog-pr-25712.yml deleted file mode 100644 index 00cb69b9193..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25712.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "RaShCat" -delete-after: True -changes: - - bugfix: "offsets of items in teshari's paws and worn head" - - image: "simple redraw of teshari's sabres." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25730.yml b/html/changelogs/AutoChangeLog-pr-25730.yml deleted file mode 100644 index 26d3bf9816a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25730.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Paxilmaniac" -delete-after: True -changes: - - qol: "The sol rifles have had their names changed so that they suck less to refer to as characters that don't speak french-afrikaans (coming 2023)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25743.yml b/html/changelogs/AutoChangeLog-pr-25743.yml deleted file mode 100644 index 5a008e88910..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25743.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "vinylspiders" -delete-after: True -changes: - - bugfix: "fixes company imports bluescreen" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25744.yml b/html/changelogs/AutoChangeLog-pr-25744.yml deleted file mode 100644 index 33f3cc56410..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25744.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Paxilmaniac" -delete-after: True -changes: - - sound: "The sound effect that the arc welder uses has been changed to be less quiet and more noticable" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25746.yml b/html/changelogs/AutoChangeLog-pr-25746.yml deleted file mode 100644 index 8d3e2382188..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25746.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "vinylspiders" -delete-after: True -changes: - - bugfix: "fixed a bug where certain loadout menu items would duplicate themselves across tabs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25754.yml b/html/changelogs/AutoChangeLog-pr-25754.yml deleted file mode 100644 index 5ca102ab2e5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25754.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nikothedude" -delete-after: True -changes: - - bugfix: "Unspillable organs no longer spill" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-25755.yml b/html/changelogs/AutoChangeLog-pr-25755.yml deleted file mode 100644 index 6188b2172e8..00000000000 --- a/html/changelogs/AutoChangeLog-pr-25755.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "fixes some dropdowns not displaying the right text after selecting something" \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index faa40426581..394760acc15 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -708,3 +708,40 @@ - bugfix: fixed the Mafia Warden having a hat that didn't match his jacket, and fixed SpacePol masks not covering the nose - bugfix: Emojipedia should copy the text on click properly, now +2023-12-21: + KannaLisvern: + - rscadd: Added a new ERP emote. *lewdmoan + Nerev4r: + - rscadd: Due to increased availability of calcium supplements in Sector 13 due + to Deep Spacer lobbying, snailpeople have found their shells to be more suited + towards protection of themselves and their recently-discovered-to-be-binary + hearts in a combat scenario. + - rscadd: Snailpeople have been invited to recent EVA training sessions, and have + learned to attach themselves to the floors if gravity generators go out; who'd + have thunk it? + - bugfix: Snailpeople no longer benefit from Settler's equipment load reduction + while crawling. I could not think of a funny caption for this. + Paxilmaniac: + - balance: Shotgun shells, ESPECIALLY skyrat's shotgun shells, have been rebalanced + to not either be useless or insane in every situation, see pr for details. + - image: New sprites for some projectiles, like flechettes and whatnot + - sound: The sound effect that the arc welder uses has been changed to be less quiet + and more noticable + - balance: SolFed response team equipment has been changed around a bit with the + new armor and whatnot. + - image: SolFed response teams (and cargo imports) can now see a new set of SolFed + uniforms, one for peacekeepers and one for EMTs. No longer do they have to dress + as wild west larpers, or half life HECU. + - qol: The sol rifles have had their names changed so that they suck less to refer + to as characters that don't speak french-afrikaans (coming 2023) + RaShCat: + - bugfix: offsets of items in teshari's paws and worn head + - image: simple redraw of teshari's sabres. + SkyratBot: + - bugfix: fixes some dropdowns not displaying the right text after selecting something + nikothedude: + - bugfix: Unspillable organs no longer spill + vinylspiders: + - bugfix: fixes company imports bluescreen + - bugfix: fixed a bug where certain loadout menu items would duplicate themselves + across tabs From 782c0cd60723308e801a9a2d823e581e24e78603 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 01:52:25 +0100 Subject: [PATCH 043/188] [MIRROR] Disease Outbreak event only considers on-station players to be candidates [MDB IGNORE] (#25751) * Disease Outbreak event only considers on-station players to be candidates * Update disease_outbreak.dm * Update ev_roleplay_check.dm --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- code/modules/events/disease_outbreak.dm | 6 ++++-- .../modules/ices_events/code/events/ev_roleplay_check.dm | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 38b313a6417..3be09528abd 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -61,10 +61,12 @@ continue if(length(candidate.diseases)) //Is our candidate already sick? continue - // SKYRAT EDIT ADD START - Station/area event candidate filtering + if(!is_station_level(candidate.z) && !is_mining_level(candidate.z)) //Diseases can't really spread if the vector is in deep space. + continue + // SKYRAT EDIT ADDITION START - Station/area event candidate filtering. if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) continue - // SKYRAT EDIT ADD END + // SKYRAT EDIT ADDITION END disease_candidates += candidate ///Handles checking and alerting admins about the number of valid candidates diff --git a/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm b/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm index d55fd75aeb3..0def7040812 100644 --- a/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm +++ b/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm @@ -4,10 +4,10 @@ /proc/engaged_role_play_check(mob/living/carbon/human/player, station = TRUE, dorms = TRUE) var/turf/player_turf = get_turf(player) var/area/player_area = get_area(player_turf) - if(!is_station_level(player_turf.z) && station) - return TRUE - if(istype(player_area, /area/station/commons/dorms) && dorms) + if(station && !is_station_level(player_turf.z)) + return TRUE + if(dorms && istype(player_area, /area/station/commons/dorms)) return TRUE return FALSE From 35883e7e316653390c84e6d374940ffe6e32563f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 02:00:06 +0100 Subject: [PATCH 044/188] Automatic changelog for PR #25751 [ci skip] --- html/changelogs/AutoChangeLog-pr-25751.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25751.yml diff --git a/html/changelogs/AutoChangeLog-pr-25751.yml b/html/changelogs/AutoChangeLog-pr-25751.yml new file mode 100644 index 00000000000..80b614f800b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25751.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Disease Outbreak events will only select players on the station/lavaland as patient zero." \ No newline at end of file From 59b7d779369ea284c7743e7892f6175a70fcc0b9 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 02:09:47 +0100 Subject: [PATCH 045/188] [MIRROR] Add a missing deadsay span for DC examination [MDB IGNORE] (#25752) * Add a missing deadsay span for DC examination * Update examine.dm * Update examine.dm --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- code/modules/mob/living/carbon/human/examine.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 421084f9c17..9e36124c5a1 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -366,8 +366,7 @@ if(!key) msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n" else if(!client) - //msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" //ORIGINAL - msg += "[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.\n" //SKYRAT CHANGE ADDITION - SSD_INDICATOR + msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.")]\n" // SKYRAT EDIT CHANGE - SSD_INDICATOR - ORIGINAL: msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.")]\n" var/scar_severity = 0 for(var/i in all_scars) From 7273885f9bb1713e31819ebf4d162d4ece594a86 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 02:23:54 +0100 Subject: [PATCH 046/188] Automatic changelog for PR #25752 [ci skip] --- html/changelogs/AutoChangeLog-pr-25752.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25752.yml diff --git a/html/changelogs/AutoChangeLog-pr-25752.yml b/html/changelogs/AutoChangeLog-pr-25752.yml new file mode 100644 index 00000000000..2f7eefd7a4f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25752.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Examine text on disconnected players is no longer accidentally subtle" \ No newline at end of file From db6f8e646f98be9021a053d6ec6b86b83fa7dfae Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 02:24:56 +0100 Subject: [PATCH 047/188] [MIRROR] Combine roundstart intercept and security level announcements [MDB IGNORE] (#25759) * Combine roundstart intercept and security level announcements (#80475) ## About The Pull Request At roundstart when the intercept report is sent, two announcements are created at the same time. It's loud and overlaps. This combines them into a single announcement. Before: ![image](https://github.com/tgstation/tgstation/assets/83487515/024e783a-65d9-4c28-8850-f114b1f020ad) After: ![image](https://github.com/tgstation/tgstation/assets/83487515/7272f82f-23b4-4e90-99a2-1b590c7d56cf) ## Why It's Good For The Game Two Centcom or any other announcements playing at the same time (especially with two different sound files) can be annoying and the sounds distort each other. ## Changelog :cl: LT3 qol: Roundstart intercept report and security level announcements are combined into a single announcement /:cl: * Combine roundstart intercept and security level announcements --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> --- code/controllers/subsystem/security_level.dm | 6 ++++-- code/game/gamemodes/dynamic/dynamic.dm | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/security_level.dm b/code/controllers/subsystem/security_level.dm index df5ea642ce3..cb61af0f3e0 100644 --- a/code/controllers/subsystem/security_level.dm +++ b/code/controllers/subsystem/security_level.dm @@ -28,8 +28,9 @@ SUBSYSTEM_DEF(security_level) * * Arguments: * * new_level - The new security level that will become our current level + * * announce - Play the announcement, set FALSE if you're doing your own custom announcement to prevent duplicates */ -/datum/controller/subsystem/security_level/proc/set_level(new_level) +/datum/controller/subsystem/security_level/proc/set_level(new_level, announce = TRUE) new_level = istext(new_level) ? new_level : number_level_to_text(new_level) if(new_level == current_security_level.name) // If we are already at the desired level, do nothing return @@ -42,7 +43,8 @@ SUBSYSTEM_DEF(security_level) if(SSnightshift.can_fire && (selected_level.number_level >= SEC_LEVEL_RED || current_security_level.number_level >= SEC_LEVEL_RED)) SSnightshift.next_fire = world.time + 7 SECONDS // Fire nightshift after the security level announcement is complete - level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level + if(announce) + level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level SSsecurity_level.current_security_level = selected_level diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 9df3602aabc..71d1ff1287e 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -324,11 +324,11 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) print_command_report(., "[command_name()] Status Summary", announce=FALSE) if(greenshift) - priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound()) + priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound(), color_override = "green") else - priority_announce("A summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT) if(SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_BLUE) - SSsecurity_level.set_level(SEC_LEVEL_BLUE) + SSsecurity_level.set_level(SEC_LEVEL_BLUE, announce = FALSE) + priority_announce("[SSsecurity_level.current_security_level.elevating_to_announcement]\n\nA summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT, color_override = SSsecurity_level.current_security_level.announcement_color) /// Generate the advisory level depending on the shown threat level. /datum/game_mode/dynamic/proc/generate_advisory_level() From 402e0da177c4cf34996422a39cd642f485212e77 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 02:38:16 +0100 Subject: [PATCH 048/188] Automatic changelog for PR #25759 [ci skip] --- html/changelogs/AutoChangeLog-pr-25759.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-25759.yml diff --git a/html/changelogs/AutoChangeLog-pr-25759.yml b/html/changelogs/AutoChangeLog-pr-25759.yml new file mode 100644 index 00000000000..0bfe8d86886 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-25759.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - qol: "Roundstart intercept report and security level announcements are combined into a single announcement" \ No newline at end of file From 30fd440bd21aedd07e72db8c598f041bab246c97 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 21 Dec 2023 07:39:36 +0100 Subject: [PATCH 049/188] [MIRROR] Fixes input boxes [No gbp] [MDB IGNORE] (#25761) * Fixes input boxes [No gbp] (#80490) ## About The Pull Request One of the quirks of react is that we're no longer using onChange the same as Inferno - React's version is a synthetic event. I made the mistake of thinking it would be okay. Many interfaces are using onChange events to send messages to byond (very laggy), others are using it to close the input (closes each keypress). So this was the alternative- I hope to replicate the behavior via onBlur && onEnter. I went through to undo most of the onInput -> onChange replacements of #80340 where it made sense. Other inputs which should safely use onChange (DEFINITELY to send messages) remain as such. Example of an input which used onChange now working with this PR: ![aUojN0owHO](https://github.com/tgstation/tgstation/assets/42397676/82aa1d44-360d-4978-bef8-12720d7b4c70) ## Why It's Good For The Game Bug fixes Fixes #80486 ## Changelog :cl: fix: Name input in character setup should work properly now. fix: Many inputs should feel more responsive. /:cl: * Fixes input boxes [No gbp] --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- tgui/docs/component-reference.md | 5 +++-- tgui/packages/tgui/components/Input.tsx | 12 ++++++++---- tgui/packages/tgui/interfaces/Cargo.jsx | 2 +- tgui/packages/tgui/interfaces/CellularEmporium.tsx | 2 +- tgui/packages/tgui/interfaces/CheckboxInput.tsx | 2 +- .../tgui/interfaces/Fabrication/SearchBar.tsx | 2 +- tgui/packages/tgui/interfaces/ForceEvent.tsx | 2 +- tgui/packages/tgui/interfaces/ListInputModal.tsx | 2 +- tgui/packages/tgui/interfaces/LogViewer.tsx | 2 +- .../tgui/interfaces/LuaEditor/StateSelectModal.jsx | 2 +- .../tgui/interfaces/MedicalRecords/RecordTabs.tsx | 2 +- tgui/packages/tgui/interfaces/NtosEmojipedia.tsx | 2 +- .../tgui/interfaces/NtosMessenger/ChatScreen.tsx | 2 +- tgui/packages/tgui/interfaces/NtosNetDownloader.tsx | 2 +- tgui/packages/tgui/interfaces/Orbit/index.tsx | 2 +- tgui/packages/tgui/interfaces/OreContainer.tsx | 2 +- .../tgui/interfaces/OreRedemptionMachine.jsx | 2 +- tgui/packages/tgui/interfaces/PersonalCrafting.tsx | 2 +- tgui/packages/tgui/interfaces/ProduceConsole.tsx | 2 +- .../tgui/interfaces/SecurityRecords/RecordTabs.tsx | 2 +- tgui/packages/tgui/interfaces/SeedExtractor.tsx | 2 +- tgui/packages/tgui/interfaces/SelectEquipment.jsx | 2 +- tgui/packages/tgui/interfaces/Spellbook.tsx | 2 +- tgui/packages/tgui/interfaces/Techweb.jsx | 2 +- .../tgui/interfaces/Uplink/GenericUplink.tsx | 2 +- 25 files changed, 34 insertions(+), 29 deletions(-) diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 87b8198bf72..653d9defc68 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -552,9 +552,10 @@ A basic text input, which allow users to enter text into a UI. - `fluid: boolean` - Fill all available horizontal space. - `selfClear: boolean` - Clear after hitting enter, as well as remain focused when this happens. Useful for things like chat inputs. -- `onChange: (e, value) => void` - Fires when the value is changed. +- `onChange: (e, value) => void` - Fires when the user clicks out or presses enter. - `onEnter: (e, value) => void` - Fires when the user hits enter. -- `onEscape: (e, value) => void` - Fires when the user hits escape. +- `onEscape: (e) => void` - Fires when the user hits escape. +- `onInput: (e, value) => void` - Fires when the user types into the input. ### `Knob` diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx index d10cd657f13..d9ecf31e908 100644 --- a/tgui/packages/tgui/components/Input.tsx +++ b/tgui/packages/tgui/components/Input.tsx @@ -17,12 +17,14 @@ type Props = Partial<{ fluid: boolean; maxLength: number; monospace: boolean; - // Fires when: Value changes + /** Fires when user is 'done typing': Clicked out, blur, enter key */ onChange: (event: SyntheticEvent, value: string) => void; - // Fires when: Pressed enter without shift + /** Fires once the enter key is pressed */ onEnter: (event: SyntheticEvent, value: string) => void; - // Fires when: Pressed escape + /** Fires once the escape key is pressed */ onEscape: (event: SyntheticEvent) => void; + /** Fires on each key press / value change. Used for searching */ + onInput: (event: SyntheticEvent, value: string) => void; placeholder: string; selfClear: boolean; value: string | number; @@ -57,6 +59,7 @@ export const Input = (props: Props) => { event.currentTarget.value = ''; } else { event.currentTarget.blur(); + onChange?.(event, event.currentTarget.value); } return; @@ -102,7 +105,8 @@ export const Input = (props: Props) => { onChange?.(event, event.target.value)} + onBlur={(event) => onChange?.(event, event.target.value)} + onChange={(event) => onInput?.(event, event.target.value)} onKeyDown={handleKeyDown} placeholder={placeholder} ref={inputRef} diff --git a/tgui/packages/tgui/interfaces/Cargo.jsx b/tgui/packages/tgui/interfaces/Cargo.jsx index 045cdd13277..f160970bc51 100644 --- a/tgui/packages/tgui/interfaces/Cargo.jsx +++ b/tgui/packages/tgui/interfaces/Cargo.jsx @@ -235,7 +235,7 @@ export const CargoCatalog = (props) => { fluid placeholder="Search..." value={searchText} - onChange={(e, value) => { + onInput={(e, value) => { if (value === searchText) { return; } diff --git a/tgui/packages/tgui/interfaces/CellularEmporium.tsx b/tgui/packages/tgui/interfaces/CellularEmporium.tsx index 2573b46c6e1..c8ef86460c0 100644 --- a/tgui/packages/tgui/interfaces/CellularEmporium.tsx +++ b/tgui/packages/tgui/interfaces/CellularEmporium.tsx @@ -71,7 +71,7 @@ export const CellularEmporium = (props) => { setSearchAbilities(value)} + onInput={(event, value) => setSearchAbilities(value)} placeholder="Search Abilities..." value={searchAbilities} /> diff --git a/tgui/packages/tgui/interfaces/CheckboxInput.tsx b/tgui/packages/tgui/interfaces/CheckboxInput.tsx index 4e0f088678b..0d29afd3dfa 100644 --- a/tgui/packages/tgui/interfaces/CheckboxInput.tsx +++ b/tgui/packages/tgui/interfaces/CheckboxInput.tsx @@ -99,7 +99,7 @@ export const CheckboxInput = (props) => { setSearchQuery(value)} + onInput={(_, value) => setSearchQuery(value)} />
diff --git a/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx b/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx index 27b697a9678..8afc95acc03 100644 --- a/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx +++ b/tgui/packages/tgui/interfaces/Fabrication/SearchBar.tsx @@ -45,7 +45,7 @@ export class SearchBar extends Component { this.onInput(v)} + onInput={(_e: unknown, v: string) => this.onInput(v)} value={searchText} />
diff --git a/tgui/packages/tgui/interfaces/ForceEvent.tsx b/tgui/packages/tgui/interfaces/ForceEvent.tsx index cd91214247c..a93ea6a5f43 100644 --- a/tgui/packages/tgui/interfaces/ForceEvent.tsx +++ b/tgui/packages/tgui/interfaces/ForceEvent.tsx @@ -94,7 +94,7 @@ export const PanelOptions = (props) => { setSearchQuery(value)} + onInput={(e, value) => setSearchQuery(value)} placeholder="Search..." value={searchQuery} /> diff --git a/tgui/packages/tgui/interfaces/ListInputModal.tsx b/tgui/packages/tgui/interfaces/ListInputModal.tsx index f3f871b65b8..3048d1cdbe1 100644 --- a/tgui/packages/tgui/interfaces/ListInputModal.tsx +++ b/tgui/packages/tgui/interfaces/ListInputModal.tsx @@ -246,7 +246,7 @@ const SearchBar = (props) => { event.preventDefault(); act('submit', { entry: filteredItems[selected] }); }} - onChange={(_, value) => onSearch(value)} + onInput={(_, value) => onSearch(value)} placeholder="Search..." value={searchQuery} /> diff --git a/tgui/packages/tgui/interfaces/LogViewer.tsx b/tgui/packages/tgui/interfaces/LogViewer.tsx index be8aa1c073c..be1ff09aee0 100644 --- a/tgui/packages/tgui/interfaces/LogViewer.tsx +++ b/tgui/packages/tgui/interfaces/LogViewer.tsx @@ -181,7 +181,7 @@ const CategoryViewer = (props: CategoryViewerProps) => { fill placeholder="Search" value={search} - onChange={(_, value) => setSearch(value)} + onInput={(_, value) => setSearch(value)} /> ); }; @@ -256,10 +253,12 @@ type InputProps = Partial<{ /** Accepts and handles user input. */ const ButtonInput = (props: InputProps) => { const { + children, color = 'default', content, currentValue, defaultValue, + disabled, fluid, icon, iconRotation, @@ -274,6 +273,8 @@ const ButtonInput = (props: InputProps) => { const [inInput, setInInput] = useState(false); const inputRef = createRef(); + const toDisplay = content || children; + const commitResult = (e) => { const input = inputRef.current; if (!input) return; @@ -312,8 +313,9 @@ const ButtonInput = (props: InputProps) => { onClick={() => setInInput(true)} > {icon && } -
{content}
+
{toDisplay}
{ - let { style = {}, ...restlet } = props; - const { name, size, spin, className, rotation, ...rest } = restlet; + const { name, size, spin, className, rotation, ...rest } = props; + const customStyle = rest.style || {}; if (size) { - style['fontSize'] = size * 100 + '%'; + customStyle.fontSize = size * 100 + '%'; } if (rotation) { - style['transform'] = `rotate(${rotation}deg)`; + customStyle.transform = `rotate(${rotation}deg)`; } - rest.style = style; + rest.style = customStyle; const boxProps = computeBoxProps(rest); diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx index ae3c9b6ac6f..c515627b8c1 100644 --- a/tgui/packages/tgui/components/Input.tsx +++ b/tgui/packages/tgui/components/Input.tsx @@ -14,6 +14,7 @@ type Props = Partial<{ autoFocus: boolean; autoSelect: boolean; className: string; + disabled: boolean; fluid: boolean; maxLength: number; monospace: boolean; @@ -38,7 +39,11 @@ export const Input = (props: Props) => { const { autoFocus, autoSelect, + className, + disabled, + fluid, maxLength, + monospace, onChange, onEnter, onEscape, @@ -46,9 +51,8 @@ export const Input = (props: Props) => { placeholder, selfClear, value, - ...boxProps + ...rest } = props; - const { className, fluid, monospace, ...rest } = boxProps; const inputRef = useRef(null); @@ -102,6 +106,7 @@ export const Input = (props: Props) => {
.
onChange?.(event, event.target.value)} onChange={(event) => onInput?.(event, event.target.value)} diff --git a/tgui/packages/tgui/components/TextArea.tsx b/tgui/packages/tgui/components/TextArea.tsx index 71b3f3e1bda..b8620f5a2df 100644 --- a/tgui/packages/tgui/components/TextArea.tsx +++ b/tgui/packages/tgui/components/TextArea.tsx @@ -25,6 +25,7 @@ type Props = Partial<{ autoSelect: boolean; displayedValue: string; dontUseTabForIndent: boolean; + fluid: boolean; maxLength: number; noborder: boolean; // This fires when: value changes diff --git a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx index 169912df365..9e248a01033 100644 --- a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx +++ b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx @@ -40,7 +40,7 @@ export const AiVoiceChanger = (props) => { act('verb', { verb: value, @@ -58,7 +58,7 @@ export const AiVoiceChanger = (props) => { act('name', { name: value, diff --git a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx index 3a121feeaa8..9cd4a1f5edc 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx @@ -110,7 +110,7 @@ export const AntagInfoAssaultops = (props) => {
- + { const { act, data } = useBackend(); const { available_targets, extracted_targets } = data; return ( -
+
Target List @@ -201,7 +201,7 @@ const KeyPrintout = (props) => { const { act, data } = useBackend(); const { goldeneye_keys } = data; return ( -
+
GoldenEye Keycards diff --git a/tgui/packages/tgui/interfaces/Autolathe.tsx b/tgui/packages/tgui/interfaces/Autolathe.tsx index 0640dab309f..45d7051e437 100644 --- a/tgui/packages/tgui/interfaces/Autolathe.tsx +++ b/tgui/packages/tgui/interfaces/Autolathe.tsx @@ -252,16 +252,16 @@ const AutolatheRecipe = (props: AutolatheRecipeProps) => { ])} > act('make', { id: design.id, multiplier: value, }) } - /> + > + [Max: {maxmult}] + ); diff --git a/tgui/packages/tgui/interfaces/Canvas.tsx b/tgui/packages/tgui/interfaces/Canvas.tsx index f47dafe0ce9..86d68ce3331 100644 --- a/tgui/packages/tgui/interfaces/Canvas.tsx +++ b/tgui/packages/tgui/interfaces/Canvas.tsx @@ -288,11 +288,10 @@ export const Canvas = (props) => { {!!data.editable && !!data.paint_tool_color && (
diff --git a/tgui/packages/tgui/interfaces/JobSelection.tsx b/tgui/packages/tgui/interfaces/JobSelection.tsx index 4dbde49add4..d500aa9d04f 100644 --- a/tgui/packages/tgui/interfaces/JobSelection.tsx +++ b/tgui/packages/tgui/interfaces/JobSelection.tsx @@ -143,7 +143,7 @@ export const JobSelection = (props) => { } titleStyle={{ minHeight: '3.4em' }} > - + {Object.entries(departments).map((departmentEntry) => { const departmentName = departmentEntry[0]; const entry = departmentEntry[1]; diff --git a/tgui/packages/tgui/interfaces/LightController.tsx b/tgui/packages/tgui/interfaces/LightController.tsx index f9aacf3fcfb..af1d71681a6 100644 --- a/tgui/packages/tgui/interfaces/LightController.tsx +++ b/tgui/packages/tgui/interfaces/LightController.tsx @@ -67,7 +67,7 @@ export const LightController = (props) => {
- + {category_keys.map((category, index) => ( { props; return ( -
+
{filteredItems.map((item, index) => { return ( {sorted .filter((cat) => cat.toLowerCase().includes(categorySearch.toLowerCase()), ) - .map((category) => { - return ( - - + ))}
); @@ -177,20 +173,18 @@ const CategoryViewer = (props: CategoryViewerProps) => { buttons={ <> setSearch(value)} /> )} @@ -306,12 +297,10 @@ const MafiaRole = (props) => { maxHeight="50px" buttons={ {formatTime(timeleft)} @@ -377,7 +366,7 @@ const MafiaNotesTab = (props) => { const { user_notes } = data; const [note_message, setNotesMessage] = useLocalState('Notes', user_notes); return ( -
+