From 42f82df8f2192d030e5d068806f4b7e0b3d26ce6 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:51:43 +0100 Subject: [PATCH] Delete tgui/packages/tgui_ch (#8006) --- tgui/.eslintignore | 3 - tgui/.prettierignore | 3 - tgui/packages/tgui_ch/assets.ts | 45 - .../packages/tgui_ch/assets/bg-nanotrasen.svg | 8 - tgui/packages/tgui_ch/assets/bg-neutral.svg | 5 - tgui/packages/tgui_ch/assets/bg-syndicate.svg | 6 - tgui/packages/tgui_ch/assets/bg-wizard.svg | 3 - tgui/packages/tgui_ch/backend.ts | 373 -- .../tgui_ch/components/AnimatedNumber.tsx | 189 - .../packages/tgui_ch/components/Autofocus.tsx | 19 - tgui/packages/tgui_ch/components/Blink.jsx | 68 - .../tgui_ch/components/BlockQuote.jsx | 13 - .../tgui_ch/components/BodyZoneSelector.tsx | 153 - tgui/packages/tgui_ch/components/Box.tsx | 294 -- tgui/packages/tgui_ch/components/Button.jsx | 365 -- tgui/packages/tgui_ch/components/ByondUi.jsx | 138 - tgui/packages/tgui_ch/components/Chart.jsx | 127 - .../tgui_ch/components/Collapsible.jsx | 45 - tgui/packages/tgui_ch/components/ColorBox.jsx | 31 - tgui/packages/tgui_ch/components/Dialog.tsx | 84 - tgui/packages/tgui_ch/components/Dimmer.jsx | 17 - tgui/packages/tgui_ch/components/Divider.jsx | 20 - .../tgui_ch/components/DraggableControl.jsx | 287 -- tgui/packages/tgui_ch/components/Dropdown.tsx | 395 -- .../tgui_ch/components/FakeTerminal.jsx | 51 - tgui/packages/tgui_ch/components/FitText.tsx | 91 - tgui/packages/tgui_ch/components/Flex.tsx | 115 - tgui/packages/tgui_ch/components/Grid.jsx | 38 - tgui/packages/tgui_ch/components/Icon.tsx | 98 - .../tgui_ch/components/InfinitePlane.jsx | 188 - tgui/packages/tgui_ch/components/Input.jsx | 156 - .../tgui_ch/components/KeyListener.tsx | 39 - tgui/packages/tgui_ch/components/Knob.jsx | 138 - .../tgui_ch/components/LabeledControls.jsx | 42 - .../tgui_ch/components/LabeledList.tsx | 105 - tgui/packages/tgui_ch/components/MenuBar.tsx | 231 -- tgui/packages/tgui_ch/components/Modal.jsx | 33 - tgui/packages/tgui_ch/components/NanoMap.jsx | 223 -- .../packages/tgui_ch/components/NoticeBox.jsx | 27 - .../tgui_ch/components/NumberInput.jsx | 284 -- tgui/packages/tgui_ch/components/Popper.tsx | 84 - .../tgui_ch/components/ProgressBar.jsx | 66 - .../tgui_ch/components/RestrictedInput.jsx | 176 - .../tgui_ch/components/RoundGauge.jsx | 134 - tgui/packages/tgui_ch/components/Section.tsx | 116 - tgui/packages/tgui_ch/components/Slider.jsx | 126 - tgui/packages/tgui_ch/components/Stack.tsx | 76 - .../tgui_ch/components/StyleableSection.tsx | 26 - tgui/packages/tgui_ch/components/Table.jsx | 64 - tgui/packages/tgui_ch/components/Tabs.jsx | 63 - tgui/packages/tgui_ch/components/TextArea.jsx | 238 -- .../tgui_ch/components/TimeDisplay.jsx | 63 - tgui/packages/tgui_ch/components/Tooltip.tsx | 150 - .../tgui_ch/components/TrackOutsideClicks.tsx | 35 - tgui/packages/tgui_ch/components/index.jsx | 49 - tgui/packages/tgui_ch/constants.test.ts | 88 - tgui/packages/tgui_ch/constants.ts | 316 -- tgui/packages/tgui_ch/debug/KitchenSink.jsx | 54 - tgui/packages/tgui_ch/debug/actions.js | 11 - tgui/packages/tgui_ch/debug/hooks.js | 10 - tgui/packages/tgui_ch/debug/index.ts | 10 - tgui/packages/tgui_ch/debug/middleware.js | 81 - tgui/packages/tgui_ch/debug/reducer.js | 22 - tgui/packages/tgui_ch/debug/selectors.js | 7 - tgui/packages/tgui_ch/drag.ts | 286 -- tgui/packages/tgui_ch/events.test.ts | 60 - tgui/packages/tgui_ch/events.ts | 233 -- tgui/packages/tgui_ch/focus.ts | 25 - tgui/packages/tgui_ch/format.test.ts | 112 - tgui/packages/tgui_ch/format.ts | 181 - tgui/packages/tgui_ch/hotkeys.ts | 220 - tgui/packages/tgui_ch/http.ts | 16 - tgui/packages/tgui_ch/index.tsx | 78 - tgui/packages/tgui_ch/interfaces/AICard.jsx | 126 - tgui/packages/tgui_ch/interfaces/APC.jsx | 311 -- .../tgui_ch/interfaces/AccountsTerminal.jsx | 220 - .../interfaces/AdminShuttleController.tsx | 104 - .../packages/tgui_ch/interfaces/AgentCard.tsx | 49 - .../packages/tgui_ch/interfaces/AiAirlock.jsx | 196 - .../tgui_ch/interfaces/AiRestorer.jsx | 86 - .../tgui_ch/interfaces/AiSupermatter.jsx | 77 - tgui/packages/tgui_ch/interfaces/AirAlarm.jsx | 312 -- .../tgui_ch/interfaces/AlertModal.tsx | 151 - .../packages/tgui_ch/interfaces/AlgaeFarm.jsx | 110 - .../tgui_ch/interfaces/AppearanceChanger.jsx | 509 --- .../tgui_ch/interfaces/ArcadeBattle.jsx | 125 - .../interfaces/AreaScrubberControl.jsx | 113 - .../tgui_ch/interfaces/AssemblyInfrared.tsx | 42 - .../tgui_ch/interfaces/AssemblyProx.jsx | 62 - .../tgui_ch/interfaces/AssemblyTimer.jsx | 40 - .../tgui_ch/interfaces/AtmosAlertConsole.jsx | 45 - .../tgui_ch/interfaces/AtmosControl.jsx | 91 - .../tgui_ch/interfaces/AtmosFilter.jsx | 72 - .../tgui_ch/interfaces/AtmosMixer.jsx | 88 - .../packages/tgui_ch/interfaces/Autolathe.jsx | 119 - .../tgui_ch/interfaces/Batteryrack.jsx | 97 - .../tgui_ch/interfaces/BeaconLocator.jsx | 55 - .../tgui_ch/interfaces/Biogenerator.jsx | 195 - .../tgui_ch/interfaces/BodyDesigner.jsx | 340 -- .../tgui_ch/interfaces/BodyScanner.jsx | 485 --- .../tgui_ch/interfaces/BombTester.jsx | 194 - .../tgui_ch/interfaces/BotanyEditor.jsx | 57 - .../tgui_ch/interfaces/BotanyIsolator.jsx | 103 - .../packages/tgui_ch/interfaces/BrigTimer.jsx | 73 - .../tgui_ch/interfaces/CameraConsole.jsx | 161 - tgui/packages/tgui_ch/interfaces/Canister.jsx | 141 - tgui/packages/tgui_ch/interfaces/Canvas.jsx | 109 - .../interfaces/CasinoPrizeDispenser.jsx | 166 - .../packages/tgui_ch/interfaces/Changelog.jsx | 319 -- .../tgui_ch/interfaces/CharacterDirectory.jsx | 284 -- .../tgui_ch/interfaces/CheckboxInput.tsx | 110 - .../tgui_ch/interfaces/ChemDispenser.jsx | 167 - .../tgui_ch/interfaces/ChemMaster.jsx | 477 --- .../tgui_ch/interfaces/ChemSynthesizer.jsx | 380 -- .../tgui_ch/interfaces/ClawMachine.jsx | 67 - tgui/packages/tgui_ch/interfaces/Cleanbot.jsx | 137 - .../tgui_ch/interfaces/CloningConsole.jsx | 446 --- .../interfaces/CommunicationsConsole.jsx | 351 -- .../tgui_ch/interfaces/Communicator.tsx | 1319 ------ .../tgui_ch/interfaces/ComputerFabricator.jsx | 420 -- .../tgui_ch/interfaces/CookingAppliance.jsx | 79 - .../tgui_ch/interfaces/CrewManifest.tsx | 79 - .../tgui_ch/interfaces/CrewMonitor.jsx | 172 - tgui/packages/tgui_ch/interfaces/Cryo.jsx | 163 - .../tgui_ch/interfaces/CryoStorage.jsx | 74 - .../tgui_ch/interfaces/CryoStorageVr.jsx | 49 - .../tgui_ch/interfaces/DNAForensics.jsx | 55 - .../tgui_ch/interfaces/DNAModifier.jsx | 663 --- .../tgui_ch/interfaces/DestinationTagger.jsx | 30 - .../tgui_ch/interfaces/DiseaseSplicer.jsx | 179 - .../tgui_ch/interfaces/DishIncubator.jsx | 186 - .../tgui_ch/interfaces/DisposalBin.tsx | 105 - .../tgui_ch/interfaces/DroneConsole.jsx | 94 - .../tgui_ch/interfaces/EmbeddedController.jsx | 729 ---- .../tgui_ch/interfaces/EntityNarrate.tsx | 182 - .../tgui_ch/interfaces/ExonetNode.tsx | 74 - .../tgui_ch/interfaces/ExosuitFabricator.jsx | 754 ---- tgui/packages/tgui_ch/interfaces/Farmbot.jsx | 121 - tgui/packages/tgui_ch/interfaces/Fax.jsx | 149 - .../tgui_ch/interfaces/FilingCabinet.jsx | 41 - tgui/packages/tgui_ch/interfaces/Floorbot.jsx | 99 - tgui/packages/tgui_ch/interfaces/GasPump.jsx | 68 - .../interfaces/GasTemperatureSystem.jsx | 82 - .../tgui_ch/interfaces/GeneralAtmoControl.jsx | 307 -- .../tgui_ch/interfaces/GeneralRecords.jsx | 270 -- tgui/packages/tgui_ch/interfaces/Gps.jsx | 129 - .../tgui_ch/interfaces/GravityGenerator.jsx | 53 - .../packages/tgui_ch/interfaces/GuestPass.jsx | 90 - .../tgui_ch/interfaces/GyrotronControl.tsx | 111 - tgui/packages/tgui_ch/interfaces/Holodeck.jsx | 75 - .../tgui_ch/interfaces/ICAssembly.jsx | 149 - .../packages/tgui_ch/interfaces/ICCircuit.jsx | 136 - .../tgui_ch/interfaces/ICDetailer.jsx | 44 - .../packages/tgui_ch/interfaces/ICPrinter.jsx | 120 - tgui/packages/tgui_ch/interfaces/IDCard.jsx | 86 - .../interfaces/IdentificationComputer.jsx | 254 -- .../tgui_ch/interfaces/InventoryPanel.tsx | 50 - .../interfaces/InventoryPanelHuman.jsx | 118 - .../interfaces/IsolationCentrifuge.jsx | 110 - .../tgui_ch/interfaces/JanitorCart.jsx | 145 - tgui/packages/tgui_ch/interfaces/Jukebox.jsx | 137 - .../tgui_ch/interfaces/LawManager.jsx | 345 -- .../tgui_ch/interfaces/ListInputModal.tsx | 247 -- .../tgui_ch/interfaces/LookingGlass.jsx | 53 - .../interfaces/MechaControlConsole.jsx | 125 - tgui/packages/tgui_ch/interfaces/Medbot.jsx | 121 - .../tgui_ch/interfaces/MedicalRecords.jsx | 411 -- .../tgui_ch/interfaces/MessageMonitor.jsx | 422 -- .../packages/tgui_ch/interfaces/Microwave.jsx | 67 - .../interfaces/MiningOreProcessingConsole.jsx | 154 - .../interfaces/MiningStackingConsole.jsx | 53 - .../tgui_ch/interfaces/MiningVendor.jsx | 164 - .../tgui_ch/interfaces/MobSpawner.tsx | 330 -- tgui/packages/tgui_ch/interfaces/MuleBot.tsx | 137 - tgui/packages/tgui_ch/interfaces/NIF.jsx | 283 -- .../tgui_ch/interfaces/NTNetRelay.jsx | 93 - .../tgui_ch/interfaces/Newscaster.jsx | 583 --- .../tgui_ch/interfaces/NoticeBoard.tsx | 66 - .../interfaces/NtosAccessDecrypter.tsx | 64 - .../tgui_ch/interfaces/NtosArcade.jsx | 123 - .../tgui_ch/interfaces/NtosAtmosControl.tsx | 12 - .../tgui_ch/interfaces/NtosCameraConsole.jsx | 108 - .../interfaces/NtosCommunicationsConsole.tsx | 12 - .../tgui_ch/interfaces/NtosConfiguration.jsx | 90 - .../tgui_ch/interfaces/NtosCrewManifest.tsx | 12 - .../tgui_ch/interfaces/NtosCrewMonitor.tsx | 12 - .../tgui_ch/interfaces/NtosDigitalWarrant.jsx | 150 - .../interfaces/NtosEmailAdministration.jsx | 145 - .../tgui_ch/interfaces/NtosEmailClient.jsx | 423 -- .../tgui_ch/interfaces/NtosFileManager.jsx | 183 - .../interfaces/NtosIdentificationComputer.tsx | 12 - tgui/packages/tgui_ch/interfaces/NtosMain.jsx | 146 - .../tgui_ch/interfaces/NtosNetChat.jsx | 173 - .../tgui_ch/interfaces/NtosNetDos.jsx | 96 - .../tgui_ch/interfaces/NtosNetDownloader.jsx | 133 - .../tgui_ch/interfaces/NtosNetMonitor.jsx | 179 - .../tgui_ch/interfaces/NtosNetTransfer.jsx | 158 - .../tgui_ch/interfaces/NtosNewsBrowser.jsx | 137 - .../interfaces/NtosOvermapNavigation.tsx | 12 - .../tgui_ch/interfaces/NtosPowerMonitor.tsx | 12 - tgui/packages/tgui_ch/interfaces/NtosRCON.tsx | 12 - .../tgui_ch/interfaces/NtosRevelation.tsx | 51 - .../tgui_ch/interfaces/NtosShutoffMonitor.tsx | 12 - .../interfaces/NtosStationAlertConsole.tsx | 12 - .../interfaces/NtosSupermatterMonitor.tsx | 12 - tgui/packages/tgui_ch/interfaces/NtosUAV.jsx | 73 - .../tgui_ch/interfaces/NtosWordProcessor.jsx | 102 - .../tgui_ch/interfaces/NumberInputModal.tsx | 118 - .../tgui_ch/interfaces/OmniFilter.tsx | 125 - .../packages/tgui_ch/interfaces/OmniMixer.tsx | 181 - .../tgui_ch/interfaces/OperatingComputer.jsx | 245 -- .../tgui_ch/interfaces/OvermapDisperser.jsx | 126 - .../tgui_ch/interfaces/OvermapEngines.jsx | 155 - .../tgui_ch/interfaces/OvermapFull.tsx | 31 - .../tgui_ch/interfaces/OvermapHelm.jsx | 228 -- .../tgui_ch/interfaces/OvermapNavigation.tsx | 53 - .../interfaces/OvermapShieldGenerator.jsx | 208 - .../tgui_ch/interfaces/OvermapShipSensors.jsx | 115 - .../interfaces/ParticleAccelerator.tsx | 66 - .../tgui_ch/interfaces/PartsLathe.jsx | 100 - .../tgui_ch/interfaces/PathogenicIsolator.jsx | 200 - tgui/packages/tgui_ch/interfaces/Pda.jsx | 209 - .../tgui_ch/interfaces/PersonalCrafting.jsx | 180 - .../interfaces/PetrificationInterface.jsx | 128 - .../tgui_ch/interfaces/Photocopier.jsx | 122 - .../tgui_ch/interfaces/PipeDispenser.jsx | 72 - .../tgui_ch/interfaces/PlantAnalyzer.jsx | 91 - .../tgui_ch/interfaces/PlayerNotes.tsx | 93 - .../tgui_ch/interfaces/PlayerNotesInfo.tsx | 63 - .../interfaces/PointDefenseControl.tsx | 60 - .../tgui_ch/interfaces/PortableGenerator.jsx | 94 - .../tgui_ch/interfaces/PortablePump.jsx | 80 - .../tgui_ch/interfaces/PortableScrubber.tsx | 39 - .../tgui_ch/interfaces/PortableTurret.jsx | 120 - .../tgui_ch/interfaces/PowerMonitor.jsx | 277 -- .../tgui_ch/interfaces/PrecisionEditor.jsx | 165 - .../tgui_ch/interfaces/PressureRegulator.jsx | 123 - .../tgui_ch/interfaces/PrisonerManagement.jsx | 99 - tgui/packages/tgui_ch/interfaces/RCON.jsx | 331 -- tgui/packages/tgui_ch/interfaces/RIGSuit.jsx | 333 -- tgui/packages/tgui_ch/interfaces/Radio.jsx | 166 - .../tgui_ch/interfaces/RapidPipeDispenser.jsx | 231 -- .../tgui_ch/interfaces/RequestConsole.jsx | 334 -- .../tgui_ch/interfaces/ResearchConsole.jsx | 840 ---- .../interfaces/ResearchServerController.jsx | 231 -- .../tgui_ch/interfaces/ResleevingConsole.jsx | 590 --- .../tgui_ch/interfaces/ResleevingPod.jsx | 84 - .../interfaces/RoboticsControlConsole.jsx | 142 - .../tgui_ch/interfaces/RogueZones.jsx | 105 - .../tgui_ch/interfaces/RustCoreMonitor.tsx | 114 - .../tgui_ch/interfaces/RustFuelControl.tsx | 77 - tgui/packages/tgui_ch/interfaces/Secbot.jsx | 104 - .../tgui_ch/interfaces/SecureSafe.jsx | 89 - .../tgui_ch/interfaces/SecurityRecords.jsx | 297 -- .../tgui_ch/interfaces/SeedStorage.jsx | 56 - .../tgui_ch/interfaces/ShieldCapacitor.jsx | 67 - .../tgui_ch/interfaces/ShieldGenerator.jsx | 187 - .../tgui_ch/interfaces/ShutoffMonitor.jsx | 64 - .../tgui_ch/interfaces/ShuttleControl.jsx | 471 --- tgui/packages/tgui_ch/interfaces/Signaler.tsx | 110 - tgui/packages/tgui_ch/interfaces/Sleeper.jsx | 316 -- .../packages/tgui_ch/interfaces/SmartVend.jsx | 113 - tgui/packages/tgui_ch/interfaces/Smes.jsx | 216 - .../tgui_ch/interfaces/SolarControl.jsx | 134 - .../tgui_ch/interfaces/SpaceHeater.tsx | 65 - tgui/packages/tgui_ch/interfaces/Stack.jsx | 163 - .../tgui_ch/interfaces/StarcasterCh.jsx | 89 - .../interfaces/StationAlertConsole.jsx | 67 - .../tgui_ch/interfaces/StationBlueprints.jsx | 34 - .../tgui_ch/interfaces/StockExchange.jsx | 295 -- .../tgui_ch/interfaces/SuitCycler.jsx | 189 - .../tgui_ch/interfaces/SuitStorageUnit.jsx | 209 - .../tgui_ch/interfaces/SupermatterMonitor.jsx | 173 - .../tgui_ch/interfaces/SupplyConsole.jsx | 468 --- .../tgui_ch/interfaces/TEGenerator.jsx | 85 - tgui/packages/tgui_ch/interfaces/Tank.jsx | 102 - .../tgui_ch/interfaces/TankDispenser.tsx | 47 - .../interfaces/TelecommsLogBrowser.jsx | 212 - .../interfaces/TelecommsMachineBrowser.jsx | 120 - .../interfaces/TelecommsMultitoolMenu.jsx | 237 -- .../tgui_ch/interfaces/Teleporter.tsx | 67 - .../tgui_ch/interfaces/TelesciConsole.jsx | 143 - .../tgui_ch/interfaces/TextInputModal.tsx | 125 - .../tgui_ch/interfaces/TguiFeedback.tsx | 62 - tgui/packages/tgui_ch/interfaces/Ticket.tsx | 157 - .../tgui_ch/interfaces/TicketChat.tsx | 102 - .../tgui_ch/interfaces/TicketsPanel.tsx | 301 -- .../packages/tgui_ch/interfaces/TimeClock.jsx | 138 - .../tgui_ch/interfaces/TraitTutorial.tsx | 84 - .../tgui_ch/interfaces/TransferValve.tsx | 93 - .../tgui_ch/interfaces/TurbineControl.jsx | 92 - .../packages/tgui_ch/interfaces/Turbolift.jsx | 80 - tgui/packages/tgui_ch/interfaces/Uplink.jsx | 288 -- tgui/packages/tgui_ch/interfaces/Vending.jsx | 136 - .../tgui_ch/interfaces/VolumePanel.tsx | 42 - .../packages/tgui_ch/interfaces/VorePanel.jsx | 3563 ----------------- .../tgui_ch/interfaces/VorePanelExport.tsx | 1265 ------ tgui/packages/tgui_ch/interfaces/Wires.jsx | 70 - .../interfaces/XenoarchArtifactAnalyzer.tsx | 55 - .../interfaces/XenoarchArtifactHarvester.jsx | 98 - .../interfaces/XenoarchDepthScanner.tsx | 83 - .../XenoarchHandheldPowerUtilizer.tsx | 99 - .../tgui_ch/interfaces/XenoarchReplicator.tsx | 30 - .../XenoarchReplicator_clothing_vr.jsx | 26 - .../XenoarchReplicator_voremob_vr.jsx | 26 - .../interfaces/XenoarchSpectrometer.jsx | 222 - .../tgui_ch/interfaces/XenoarchSuspension.tsx | 70 - .../interfaces/common/AtmosControls.jsx | 194 - .../interfaces/common/BeakerContents.jsx | 29 - .../interfaces/common/ComplexModal.jsx | 190 - .../interfaces/common/FullscreenNotice.jsx | 17 - .../interfaces/common/InputButtons.tsx | 76 - .../common/InterfaceLockNoticeBox.jsx | 63 - .../tgui_ch/interfaces/common/Loader.tsx | 15 - .../tgui_ch/interfaces/common/LoginInfo.jsx | 33 - .../tgui_ch/interfaces/common/LoginScreen.jsx | 114 - .../tgui_ch/interfaces/common/Mining.jsx | 41 - .../tgui_ch/interfaces/common/Overmap.jsx | 105 - .../interfaces/common/PortableAtmos.jsx | 79 - .../tgui_ch/interfaces/common/RankIcon.jsx | 116 - .../interfaces/common/TemporaryNotice.jsx | 39 - tgui/packages/tgui_ch/interfaces/pAIAtmos.jsx | 55 - .../tgui_ch/interfaces/pAIDirectives.tsx | 63 - .../tgui_ch/interfaces/pAIDoorjack.jsx | 67 - .../tgui_ch/interfaces/pAIInterface.tsx | 60 - .../tgui_ch/interfaces/pAIMedrecords.jsx | 82 - .../tgui_ch/interfaces/pAISecrecords.jsx | 74 - .../tgui_ch/interfaces/pda/pda_atmos_scan.jsx | 48 - .../tgui_ch/interfaces/pda/pda_janitor.jsx | 69 - .../tgui_ch/interfaces/pda/pda_main_menu.jsx | 71 - .../tgui_ch/interfaces/pda/pda_manifest.jsx | 13 - .../tgui_ch/interfaces/pda/pda_medical.jsx | 89 - .../tgui_ch/interfaces/pda/pda_messenger.jsx | 261 -- .../tgui_ch/interfaces/pda/pda_news.jsx | 118 - .../tgui_ch/interfaces/pda/pda_notekeeper.jsx | 126 - .../tgui_ch/interfaces/pda/pda_power.jsx | 8 - .../tgui_ch/interfaces/pda/pda_security.jsx | 79 - .../tgui_ch/interfaces/pda/pda_signaller.jsx | 5 - .../interfaces/pda/pda_status_display.jsx | 55 - .../tgui_ch/interfaces/pda/pda_supply.jsx | 44 - tgui/packages/tgui_ch/layouts/Layout.jsx | 45 - tgui/packages/tgui_ch/layouts/NtosWindow.jsx | 127 - tgui/packages/tgui_ch/layouts/Pane.jsx | 39 - tgui/packages/tgui_ch/layouts/Window.jsx | 202 - tgui/packages/tgui_ch/layouts/index.ts | 10 - tgui/packages/tgui_ch/links.test.ts | 79 - tgui/packages/tgui_ch/links.ts | 46 - tgui/packages/tgui_ch/logging.ts | 68 - tgui/packages/tgui_ch/package.json | 23 - tgui/packages/tgui_ch/renderer.ts | 67 - tgui/packages/tgui_ch/routes.tsx | 107 - tgui/packages/tgui_ch/sanitize.test.ts | 36 - tgui/packages/tgui_ch/sanitize.ts | 81 - tgui/packages/tgui_ch/store.ts | 119 - .../packages/tgui_ch/stories/Blink.stories.js | 20 - .../tgui_ch/stories/BlockQuote.stories.js | 23 - tgui/packages/tgui_ch/stories/Box.stories.js | 27 - .../tgui_ch/stories/Button.stories.js | 68 - .../tgui_ch/stories/ByondUi.stories.js | 65 - .../tgui_ch/stories/Collapsible.stories.js | 23 - tgui/packages/tgui_ch/stories/Flex.stories.js | 68 - .../packages/tgui_ch/stories/Input.stories.js | 112 - .../tgui_ch/stories/LabaledList.stories.js | 71 - .../tgui_ch/stories/Popper.stories.js | 56 - .../tgui_ch/stories/ProgressBar.stories.js | 53 - .../packages/tgui_ch/stories/Stack.stories.js | 55 - .../tgui_ch/stories/Storage.stories.js | 43 - tgui/packages/tgui_ch/stories/Tabs.stories.js | 133 - .../tgui_ch/stories/Themes.stories.js | 30 - .../tgui_ch/stories/Tooltip.stories.js | 47 - tgui/packages/tgui_ch/stories/common.js | 19 - .../tgui_ch/styles/atomic/candystripe.scss | 8 - .../packages/tgui_ch/styles/atomic/color.scss | 21 - .../tgui_ch/styles/atomic/debug-layout.scss | 17 - .../packages/tgui_ch/styles/atomic/links.scss | 12 - .../tgui_ch/styles/atomic/outline.scss | 47 - tgui/packages/tgui_ch/styles/atomic/text.scss | 44 - tgui/packages/tgui_ch/styles/base.scss | 32 - tgui/packages/tgui_ch/styles/colors.scss | 90 - .../tgui_ch/styles/components/BlockQuote.scss | 20 - .../tgui_ch/styles/components/Button.scss | 166 - .../tgui_ch/styles/components/ColorBox.scss | 12 - .../tgui_ch/styles/components/Dimmer.scss | 21 - .../tgui_ch/styles/components/Divider.scss | 27 - .../tgui_ch/styles/components/Dropdown.scss | 81 - .../tgui_ch/styles/components/Flex.scss | 31 - .../tgui_ch/styles/components/Icon.scss | 25 - .../tgui_ch/styles/components/Input.scss | 68 - .../tgui_ch/styles/components/Knob.scss | 131 - .../styles/components/LabeledList.scss | 56 - .../tgui_ch/styles/components/Modal.scss | 14 - .../tgui_ch/styles/components/NanoMap.scss | 23 - .../tgui_ch/styles/components/NoticeBox.scss | 65 - .../styles/components/NumberInput.scss | 76 - .../styles/components/ProgressBar.scss | 59 - .../tgui_ch/styles/components/RoundGauge.scss | 88 - .../tgui_ch/styles/components/Section.scss | 163 - .../tgui_ch/styles/components/Slider.scss | 54 - .../tgui_ch/styles/components/Stack.scss | 35 - .../tgui_ch/styles/components/Table.scss | 44 - .../tgui_ch/styles/components/Tabs.scss | 146 - .../tgui_ch/styles/components/TextArea.scss | 63 - .../tgui_ch/styles/components/Tooltip.scss | 24 - tgui/packages/tgui_ch/styles/functions.scss | 78 - .../tgui_ch/styles/interfaces/AlertModal.scss | 29 - .../styles/interfaces/CameraConsole.scss | 53 - .../tgui_ch/styles/interfaces/Changelog.scss | 13 - .../styles/interfaces/CrewManifest.scss | 58 - .../interfaces/ExperimentConfigure.scss | 85 - .../tgui_ch/styles/interfaces/IDCard.scss | 15 - .../tgui_ch/styles/interfaces/InputModal.scss | 29 - .../styles/interfaces/IntegratedCircuit.scss | 36 - .../tgui_ch/styles/interfaces/ListInput.scss | 29 - .../styles/interfaces/NuclearBomb.scss | 64 - .../tgui_ch/styles/interfaces/Paper.scss | 18 - .../tgui_ch/styles/interfaces/Roulette.scss | 100 - .../tgui_ch/styles/interfaces/Safe.scss | 84 - .../styles/interfaces/TachyonArray.scss | 13 - .../tgui_ch/styles/interfaces/Techweb.scss | 78 - .../styles/interfaces/TinderMessaging.scss | 58 - .../tgui_ch/styles/interfaces/Turbolift.scss | 16 - .../tgui_ch/styles/layouts/Layout.scss | 69 - .../tgui_ch/styles/layouts/NtosHeader.scss | 20 - .../tgui_ch/styles/layouts/NtosWindow.scss | 26 - .../tgui_ch/styles/layouts/TitleBar.scss | 107 - .../tgui_ch/styles/layouts/Window.scss | 103 - tgui/packages/tgui_ch/styles/main.scss | 78 - tgui/packages/tgui_ch/styles/reset.scss | 68 - .../tgui_ch/styles/themes/abductor.scss | 69 - .../tgui_ch/styles/themes/abstract.scss | 19 - .../tgui_ch/styles/themes/cardtable.scss | 57 - .../tgui_ch/styles/themes/hackerman.scss | 62 - .../tgui_ch/styles/themes/malfunction.scss | 68 - .../tgui_ch/styles/themes/neutral.scss | 50 - tgui/packages/tgui_ch/styles/themes/ntos.scss | 44 - .../packages/tgui_ch/styles/themes/paper.scss | 177 - .../tgui_ch/styles/themes/pda-retro.scss | 73 - .../packages/tgui_ch/styles/themes/retro.scss | 61 - .../tgui_ch/styles/themes/syndicate.scss | 68 - .../tgui_ch/styles/themes/wizard.scss | 69 - tgui/tsconfig.json | 6 +- tgui/yarn.lock | 79 +- 442 files changed, 6 insertions(+), 58744 deletions(-) delete mode 100644 tgui/packages/tgui_ch/assets.ts delete mode 100644 tgui/packages/tgui_ch/assets/bg-nanotrasen.svg delete mode 100644 tgui/packages/tgui_ch/assets/bg-neutral.svg delete mode 100644 tgui/packages/tgui_ch/assets/bg-syndicate.svg delete mode 100644 tgui/packages/tgui_ch/assets/bg-wizard.svg delete mode 100644 tgui/packages/tgui_ch/backend.ts delete mode 100644 tgui/packages/tgui_ch/components/AnimatedNumber.tsx delete mode 100644 tgui/packages/tgui_ch/components/Autofocus.tsx delete mode 100644 tgui/packages/tgui_ch/components/Blink.jsx delete mode 100644 tgui/packages/tgui_ch/components/BlockQuote.jsx delete mode 100644 tgui/packages/tgui_ch/components/BodyZoneSelector.tsx delete mode 100644 tgui/packages/tgui_ch/components/Box.tsx delete mode 100644 tgui/packages/tgui_ch/components/Button.jsx delete mode 100644 tgui/packages/tgui_ch/components/ByondUi.jsx delete mode 100644 tgui/packages/tgui_ch/components/Chart.jsx delete mode 100644 tgui/packages/tgui_ch/components/Collapsible.jsx delete mode 100644 tgui/packages/tgui_ch/components/ColorBox.jsx delete mode 100644 tgui/packages/tgui_ch/components/Dialog.tsx delete mode 100644 tgui/packages/tgui_ch/components/Dimmer.jsx delete mode 100644 tgui/packages/tgui_ch/components/Divider.jsx delete mode 100644 tgui/packages/tgui_ch/components/DraggableControl.jsx delete mode 100644 tgui/packages/tgui_ch/components/Dropdown.tsx delete mode 100644 tgui/packages/tgui_ch/components/FakeTerminal.jsx delete mode 100644 tgui/packages/tgui_ch/components/FitText.tsx delete mode 100644 tgui/packages/tgui_ch/components/Flex.tsx delete mode 100644 tgui/packages/tgui_ch/components/Grid.jsx delete mode 100644 tgui/packages/tgui_ch/components/Icon.tsx delete mode 100644 tgui/packages/tgui_ch/components/InfinitePlane.jsx delete mode 100644 tgui/packages/tgui_ch/components/Input.jsx delete mode 100644 tgui/packages/tgui_ch/components/KeyListener.tsx delete mode 100644 tgui/packages/tgui_ch/components/Knob.jsx delete mode 100644 tgui/packages/tgui_ch/components/LabeledControls.jsx delete mode 100644 tgui/packages/tgui_ch/components/LabeledList.tsx delete mode 100644 tgui/packages/tgui_ch/components/MenuBar.tsx delete mode 100644 tgui/packages/tgui_ch/components/Modal.jsx delete mode 100644 tgui/packages/tgui_ch/components/NanoMap.jsx delete mode 100644 tgui/packages/tgui_ch/components/NoticeBox.jsx delete mode 100644 tgui/packages/tgui_ch/components/NumberInput.jsx delete mode 100644 tgui/packages/tgui_ch/components/Popper.tsx delete mode 100644 tgui/packages/tgui_ch/components/ProgressBar.jsx delete mode 100644 tgui/packages/tgui_ch/components/RestrictedInput.jsx delete mode 100644 tgui/packages/tgui_ch/components/RoundGauge.jsx delete mode 100644 tgui/packages/tgui_ch/components/Section.tsx delete mode 100644 tgui/packages/tgui_ch/components/Slider.jsx delete mode 100644 tgui/packages/tgui_ch/components/Stack.tsx delete mode 100644 tgui/packages/tgui_ch/components/StyleableSection.tsx delete mode 100644 tgui/packages/tgui_ch/components/Table.jsx delete mode 100644 tgui/packages/tgui_ch/components/Tabs.jsx delete mode 100644 tgui/packages/tgui_ch/components/TextArea.jsx delete mode 100644 tgui/packages/tgui_ch/components/TimeDisplay.jsx delete mode 100644 tgui/packages/tgui_ch/components/Tooltip.tsx delete mode 100644 tgui/packages/tgui_ch/components/TrackOutsideClicks.tsx delete mode 100644 tgui/packages/tgui_ch/components/index.jsx delete mode 100644 tgui/packages/tgui_ch/constants.test.ts delete mode 100644 tgui/packages/tgui_ch/constants.ts delete mode 100644 tgui/packages/tgui_ch/debug/KitchenSink.jsx delete mode 100644 tgui/packages/tgui_ch/debug/actions.js delete mode 100644 tgui/packages/tgui_ch/debug/hooks.js delete mode 100644 tgui/packages/tgui_ch/debug/index.ts delete mode 100644 tgui/packages/tgui_ch/debug/middleware.js delete mode 100644 tgui/packages/tgui_ch/debug/reducer.js delete mode 100644 tgui/packages/tgui_ch/debug/selectors.js delete mode 100644 tgui/packages/tgui_ch/drag.ts delete mode 100644 tgui/packages/tgui_ch/events.test.ts delete mode 100644 tgui/packages/tgui_ch/events.ts delete mode 100644 tgui/packages/tgui_ch/focus.ts delete mode 100644 tgui/packages/tgui_ch/format.test.ts delete mode 100644 tgui/packages/tgui_ch/format.ts delete mode 100644 tgui/packages/tgui_ch/hotkeys.ts delete mode 100644 tgui/packages/tgui_ch/http.ts delete mode 100644 tgui/packages/tgui_ch/index.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AICard.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/APC.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AccountsTerminal.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AdminShuttleController.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AgentCard.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AiAirlock.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AiRestorer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AiSupermatter.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AirAlarm.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AlertModal.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AlgaeFarm.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AppearanceChanger.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ArcadeBattle.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AreaScrubberControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AssemblyInfrared.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AssemblyProx.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AssemblyTimer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AtmosAlertConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AtmosControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AtmosFilter.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/AtmosMixer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Autolathe.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Batteryrack.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BeaconLocator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Biogenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BodyDesigner.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BodyScanner.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BombTester.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BotanyEditor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BotanyIsolator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/BrigTimer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CameraConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Canister.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Canvas.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CasinoPrizeDispenser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Changelog.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CharacterDirectory.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CheckboxInput.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ChemDispenser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ChemMaster.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ChemSynthesizer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ClawMachine.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Cleanbot.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CloningConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CommunicationsConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Communicator.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ComputerFabricator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CookingAppliance.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CrewManifest.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CrewMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Cryo.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CryoStorage.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/CryoStorageVr.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DNAForensics.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DNAModifier.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DestinationTagger.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DiseaseSplicer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DishIncubator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DisposalBin.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/DroneConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/EmbeddedController.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/EntityNarrate.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ExonetNode.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ExosuitFabricator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Farmbot.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Fax.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/FilingCabinet.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Floorbot.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GasPump.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GasTemperatureSystem.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GeneralAtmoControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GeneralRecords.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Gps.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GravityGenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GuestPass.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/GyrotronControl.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Holodeck.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ICAssembly.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ICCircuit.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ICDetailer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ICPrinter.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/IDCard.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/IdentificationComputer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/InventoryPanel.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/InventoryPanelHuman.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/IsolationCentrifuge.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/JanitorCart.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Jukebox.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/LawManager.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ListInputModal.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/LookingGlass.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MechaControlConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Medbot.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MedicalRecords.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MessageMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Microwave.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MiningOreProcessingConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MiningStackingConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MiningVendor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MobSpawner.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/MuleBot.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NIF.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NTNetRelay.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Newscaster.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NoticeBoard.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosAccessDecrypter.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosArcade.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosAtmosControl.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosCameraConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosCommunicationsConsole.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosConfiguration.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosCrewManifest.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosCrewMonitor.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosDigitalWarrant.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosEmailAdministration.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosEmailClient.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosFileManager.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosIdentificationComputer.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosMain.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNetChat.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNetDos.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNetDownloader.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNetMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNetTransfer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosNewsBrowser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosOvermapNavigation.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosPowerMonitor.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosRCON.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosRevelation.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosShutoffMonitor.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosStationAlertConsole.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosSupermatterMonitor.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosUAV.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NtosWordProcessor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/NumberInputModal.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OmniFilter.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OmniMixer.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OperatingComputer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapDisperser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapEngines.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapFull.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapHelm.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapNavigation.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapShieldGenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/OvermapShipSensors.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ParticleAccelerator.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PartsLathe.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PathogenicIsolator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Pda.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PersonalCrafting.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PetrificationInterface.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Photocopier.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PipeDispenser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PlantAnalyzer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PlayerNotes.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PlayerNotesInfo.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PointDefenseControl.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PortableGenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PortablePump.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PortableScrubber.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PortableTurret.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PowerMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PrecisionEditor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PressureRegulator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/PrisonerManagement.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RCON.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RIGSuit.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Radio.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RapidPipeDispenser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RequestConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ResearchConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ResearchServerController.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ResleevingConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ResleevingPod.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RoboticsControlConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RogueZones.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RustCoreMonitor.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/RustFuelControl.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Secbot.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SecureSafe.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SecurityRecords.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SeedStorage.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ShieldCapacitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ShieldGenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ShutoffMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/ShuttleControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Signaler.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Sleeper.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SmartVend.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Smes.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SolarControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SpaceHeater.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Stack.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/StarcasterCh.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/StationAlertConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/StationBlueprints.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/StockExchange.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SuitCycler.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SuitStorageUnit.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SupermatterMonitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/SupplyConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TEGenerator.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Tank.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TankDispenser.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TelecommsLogBrowser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TelecommsMachineBrowser.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TelecommsMultitoolMenu.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Teleporter.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TelesciConsole.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TextInputModal.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TguiFeedback.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Ticket.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TicketChat.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TicketsPanel.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TimeClock.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TraitTutorial.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TransferValve.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/TurbineControl.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Turbolift.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Uplink.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Vending.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/VolumePanel.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/VorePanel.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/VorePanelExport.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/Wires.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchArtifactAnalyzer.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchArtifactHarvester.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchDepthScanner.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchHandheldPowerUtilizer.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchReplicator.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchReplicator_clothing_vr.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchReplicator_voremob_vr.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchSpectrometer.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/XenoarchSuspension.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/AtmosControls.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/BeakerContents.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/ComplexModal.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/FullscreenNotice.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/InputButtons.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/InterfaceLockNoticeBox.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/Loader.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/LoginInfo.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/LoginScreen.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/Mining.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/Overmap.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/PortableAtmos.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/RankIcon.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/common/TemporaryNotice.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAIAtmos.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAIDirectives.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAIDoorjack.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAIInterface.tsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAIMedrecords.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pAISecrecords.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_atmos_scan.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_janitor.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_main_menu.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_manifest.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_medical.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_messenger.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_news.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_notekeeper.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_power.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_security.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_signaller.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_status_display.jsx delete mode 100644 tgui/packages/tgui_ch/interfaces/pda/pda_supply.jsx delete mode 100644 tgui/packages/tgui_ch/layouts/Layout.jsx delete mode 100644 tgui/packages/tgui_ch/layouts/NtosWindow.jsx delete mode 100644 tgui/packages/tgui_ch/layouts/Pane.jsx delete mode 100644 tgui/packages/tgui_ch/layouts/Window.jsx delete mode 100644 tgui/packages/tgui_ch/layouts/index.ts delete mode 100644 tgui/packages/tgui_ch/links.test.ts delete mode 100644 tgui/packages/tgui_ch/links.ts delete mode 100644 tgui/packages/tgui_ch/logging.ts delete mode 100644 tgui/packages/tgui_ch/package.json delete mode 100644 tgui/packages/tgui_ch/renderer.ts delete mode 100644 tgui/packages/tgui_ch/routes.tsx delete mode 100644 tgui/packages/tgui_ch/sanitize.test.ts delete mode 100644 tgui/packages/tgui_ch/sanitize.ts delete mode 100644 tgui/packages/tgui_ch/store.ts delete mode 100644 tgui/packages/tgui_ch/stories/Blink.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/BlockQuote.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Box.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Button.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/ByondUi.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Collapsible.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Flex.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Input.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/LabaledList.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Popper.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/ProgressBar.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Stack.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Storage.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Tabs.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Themes.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/Tooltip.stories.js delete mode 100644 tgui/packages/tgui_ch/stories/common.js delete mode 100644 tgui/packages/tgui_ch/styles/atomic/candystripe.scss delete mode 100644 tgui/packages/tgui_ch/styles/atomic/color.scss delete mode 100644 tgui/packages/tgui_ch/styles/atomic/debug-layout.scss delete mode 100644 tgui/packages/tgui_ch/styles/atomic/links.scss delete mode 100644 tgui/packages/tgui_ch/styles/atomic/outline.scss delete mode 100644 tgui/packages/tgui_ch/styles/atomic/text.scss delete mode 100644 tgui/packages/tgui_ch/styles/base.scss delete mode 100644 tgui/packages/tgui_ch/styles/colors.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/BlockQuote.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Button.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/ColorBox.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Dimmer.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Divider.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Dropdown.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Flex.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Icon.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Input.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Knob.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/LabeledList.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Modal.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/NanoMap.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/NoticeBox.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/NumberInput.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/ProgressBar.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/RoundGauge.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Section.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Slider.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Stack.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Table.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Tabs.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/TextArea.scss delete mode 100644 tgui/packages/tgui_ch/styles/components/Tooltip.scss delete mode 100644 tgui/packages/tgui_ch/styles/functions.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/AlertModal.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/CameraConsole.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Changelog.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/CrewManifest.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/ExperimentConfigure.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/IDCard.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/InputModal.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/IntegratedCircuit.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/ListInput.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/NuclearBomb.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Paper.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Roulette.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Safe.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/TachyonArray.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Techweb.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/TinderMessaging.scss delete mode 100644 tgui/packages/tgui_ch/styles/interfaces/Turbolift.scss delete mode 100644 tgui/packages/tgui_ch/styles/layouts/Layout.scss delete mode 100644 tgui/packages/tgui_ch/styles/layouts/NtosHeader.scss delete mode 100644 tgui/packages/tgui_ch/styles/layouts/NtosWindow.scss delete mode 100644 tgui/packages/tgui_ch/styles/layouts/TitleBar.scss delete mode 100644 tgui/packages/tgui_ch/styles/layouts/Window.scss delete mode 100644 tgui/packages/tgui_ch/styles/main.scss delete mode 100644 tgui/packages/tgui_ch/styles/reset.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/abductor.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/abstract.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/cardtable.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/hackerman.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/malfunction.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/neutral.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/ntos.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/paper.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/pda-retro.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/retro.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/syndicate.scss delete mode 100644 tgui/packages/tgui_ch/styles/themes/wizard.scss diff --git a/tgui/.eslintignore b/tgui/.eslintignore index 1e076d72e0..d3c0ac79cd 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -14,6 +14,3 @@ **.woff2 **.eot **.ttf - -# CHOMPEdit - Until removed -/packages/tgui_ch/** diff --git a/tgui/.prettierignore b/tgui/.prettierignore index 73259d8a07..c517b12e2e 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -18,6 +18,3 @@ ## Build artifacts /public/.tmp/**/* /public/*.map - -## CHOMPEdit - Until removed -/packages/tgui_ch diff --git a/tgui/packages/tgui_ch/assets.ts b/tgui/packages/tgui_ch/assets.ts deleted file mode 100644 index e519d0c2f7..0000000000 --- a/tgui/packages/tgui_ch/assets.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { Action, AnyAction, Middleware } from '../common/redux'; - -import { Dispatch } from 'common/redux'; - -const EXCLUDED_PATTERNS = [/v4shim/i]; -const loadedMappings: Record = {}; - -export const resolveAsset = (name: string): string => - loadedMappings[name] || name; - -export const assetMiddleware: Middleware = - (storeApi) => - (next: Dispatch) => - (action: ActionType) => { - const { type, payload } = action as AnyAction; - if (type === 'asset/stylesheet') { - Byond.loadCss(payload); - return; - } - if (type === 'asset/mappings') { - for (const name of Object.keys(payload)) { - // Skip anything that matches excluded patterns - if (EXCLUDED_PATTERNS.some((regex) => regex.test(name))) { - continue; - } - const url = payload[name]; - const ext = name.split('.').pop(); - loadedMappings[name] = url; - if (ext === 'css') { - Byond.loadCss(url); - } - if (ext === 'js') { - Byond.loadJs(url); - } - } - return; - } - next(action); - }; diff --git a/tgui/packages/tgui_ch/assets/bg-nanotrasen.svg b/tgui/packages/tgui_ch/assets/bg-nanotrasen.svg deleted file mode 100644 index d21b9f0a2a..0000000000 --- a/tgui/packages/tgui_ch/assets/bg-nanotrasen.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tgui/packages/tgui_ch/assets/bg-neutral.svg b/tgui/packages/tgui_ch/assets/bg-neutral.svg deleted file mode 100644 index e380def535..0000000000 --- a/tgui/packages/tgui_ch/assets/bg-neutral.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - \ No newline at end of file diff --git a/tgui/packages/tgui_ch/assets/bg-syndicate.svg b/tgui/packages/tgui_ch/assets/bg-syndicate.svg deleted file mode 100644 index c2863b790d..0000000000 --- a/tgui/packages/tgui_ch/assets/bg-syndicate.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/tgui/packages/tgui_ch/assets/bg-wizard.svg b/tgui/packages/tgui_ch/assets/bg-wizard.svg deleted file mode 100644 index 7b7c728a0c..0000000000 --- a/tgui/packages/tgui_ch/assets/bg-wizard.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/tgui/packages/tgui_ch/backend.ts b/tgui/packages/tgui_ch/backend.ts deleted file mode 100644 index 016ae7a0a0..0000000000 --- a/tgui/packages/tgui_ch/backend.ts +++ /dev/null @@ -1,373 +0,0 @@ -/** - * This file provides a clear separation layer between backend updates - * and what state our React app sees. - * - * Sometimes backend can response without a "data" field, but our final - * state will still contain previous "data" because we are merging - * the response with already existing state. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { perf } from 'common/perf'; -import { createAction } from 'common/redux'; -import { setupDrag } from './drag'; -import { globalEvents } from './events'; -import { focusMap } from './focus'; -import { createLogger } from './logging'; -import { resumeRenderer, suspendRenderer } from './renderer'; - -const logger = createLogger('backend'); - -export const backendUpdate = createAction('backend/update'); -export const backendSetSharedState = createAction('backend/setSharedState'); -export const backendSuspendStart = createAction('backend/suspendStart'); - -export const backendSuspendSuccess = () => ({ - type: 'backend/suspendSuccess', - payload: { - timestamp: Date.now(), - }, -}); - -const initialState = { - config: {}, - data: {}, - shared: {}, - // Start as suspended - suspended: Date.now(), - suspending: false, -}; - -export const backendReducer = (state = initialState, action) => { - const { type, payload } = action; - - if (type === 'backend/update') { - // Merge config - const config = { - ...state.config, - ...payload.config, - }; - // Merge data - const data = { - ...state.data, - ...payload.static_data, - ...payload.data, - }; - // Merge shared states - const shared = { ...state.shared }; - if (payload.shared) { - for (let key of Object.keys(payload.shared)) { - const value = payload.shared[key]; - if (value === '') { - shared[key] = undefined; - } else { - shared[key] = JSON.parse(value); - } - } - } - // Return new state - return { - ...state, - config, - data, - shared, - suspended: false, - }; - } - - if (type === 'backend/setSharedState') { - const { key, nextState } = payload; - return { - ...state, - shared: { - ...state.shared, - [key]: nextState, - }, - }; - } - - if (type === 'byond/ctrldown') { - globalEvents.emit('byond/ctrldown'); - } - - if (type === 'byond/ctrlup') { - globalEvents.emit('byond/ctrlup'); - } - - if (type === 'backend/suspendStart') { - return { - ...state, - suspending: true, - }; - } - - if (type === 'backend/suspendSuccess') { - const { timestamp } = payload; - return { - ...state, - data: {}, - shared: {}, - config: { - ...state.config, - title: '', - status: 1, - }, - suspending: false, - suspended: timestamp, - }; - } - - return state; -}; - -export const backendMiddleware = (store) => { - let fancyState; - let suspendInterval; - - return (next) => (action) => { - const { suspended } = selectBackend(store.getState()); - const { type, payload } = action; - - if (type === 'update') { - store.dispatch(backendUpdate(payload)); - return; - } - - if (type === 'suspend') { - store.dispatch(backendSuspendSuccess()); - return; - } - - if (type === 'ping') { - Byond.sendMessage('ping/reply'); - return; - } - - if (type === 'byond/mousedown') { - globalEvents.emit('byond/mousedown'); - } - - if (type === 'byond/mouseup') { - globalEvents.emit('byond/mouseup'); - } - - if (type === 'backend/suspendStart' && !suspendInterval) { - logger.log(`suspending (${Byond.windowId})`); - // Keep sending suspend messages until it succeeds. - // It may fail multiple times due to topic rate limiting. - const suspendFn = () => Byond.sendMessage('suspend'); - suspendFn(); - suspendInterval = setInterval(suspendFn, 2000); - } - - if (type === 'backend/suspendSuccess') { - suspendRenderer(); - clearInterval(suspendInterval); - suspendInterval = undefined; - Byond.winset(Byond.windowId, { - 'is-visible': false, - }); - setImmediate(() => focusMap()); - } - - if (type === 'backend/update') { - const fancy = payload.config?.window?.fancy; - // Initialize fancy state - if (fancyState === undefined) { - fancyState = fancy; - } - // React to changes in fancy - else if (fancyState !== fancy) { - logger.log('changing fancy mode to', fancy); - fancyState = fancy; - Byond.winset(Byond.windowId, { - titlebar: !fancy, - 'can-resize': !fancy, - }); - } - } - - // Resume on incoming update - if (type === 'backend/update' && suspended) { - // Show the payload - logger.log('backend/update', payload); - // Signal renderer that we have resumed - resumeRenderer(); - // Setup drag - setupDrag(); - // We schedule this for the next tick here because resizing and unhiding - // during the same tick will flash with a white background. - setImmediate(() => { - perf.mark('resume/start'); - // Doublecheck if we are not re-suspended. - const { suspended } = selectBackend(store.getState()); - if (suspended) { - return; - } - Byond.winset(Byond.windowId, { - 'is-visible': true, - }); - perf.mark('resume/finish'); - if (process.env.NODE_ENV !== 'production') { - logger.log( - 'visible in', - perf.measure('render/finish', 'resume/finish') - ); - } - }); - } - - return next(action); - }; -}; - -/** - * Sends an action to `ui_act` on `src_object` that this tgui window - * is associated with. - */ -export const sendAct = (action: string, payload: object = {}) => { - // Validate that payload is an object - // prettier-ignore - const isObject = typeof payload === 'object' - && payload !== null - && !Array.isArray(payload); - if (!isObject) { - logger.error(`Payload for act() must be an object, got this:`, payload); - return; - } - Byond.sendMessage('act/' + action, payload); -}; - -type BackendState = { - config: { - title: string; - status: number; - interface: string; - refreshing: boolean; - window: { - key: string; - size: [number, number]; - fancy: boolean; - locked: boolean; - }; - client: { - ckey: string; - address: string; - computer_id: string; - }; - user: { - name: string; - observer: number; - }; - }; - data: TData; - shared: Record; - suspending: boolean; - suspended: boolean; -}; - -/** - * Selects a backend-related slice of Redux state - */ -export const selectBackend = (state: any): BackendState => - state.backend || {}; - -/** - * Get data from tgui backend. - * - * Includes the `act` function for performing DM actions. - */ -export const useBackend = (context: any) => { - const { store } = context; - const state = selectBackend(store.getState()); - return { - ...state, - act: sendAct, - }; -}; - -/** - * A tuple that contains the state and a setter function for it. - */ -type StateWithSetter = [T, (nextState: T) => void]; - -/** - * Allocates state on Redux store without sharing it with other clients. - * - * Use it when you want to have a stateful variable in your component - * that persists between renders, but will be forgotten after you close - * the UI. - * - * It is a lot more performant than `setSharedState`. - * - * @param context React context. - * @param key Key which uniquely identifies this state in Redux store. - * @param initialState Initializes your global variable with this value. - */ -export const useLocalState = ( - context: any, - key: string, - initialState: T -): StateWithSetter => { - const { store } = context; - const state = selectBackend(store.getState()); - const sharedStates = state.shared ?? {}; - const sharedState = key in sharedStates ? sharedStates[key] : initialState; - return [ - sharedState, - (nextState) => { - store.dispatch( - backendSetSharedState({ - key, - nextState: - typeof nextState === 'function' - ? nextState(sharedState) - : nextState, - }) - ); - }, - ]; -}; - -/** - * Allocates state on Redux store, and **shares** it with other clients - * in the game. - * - * Use it when you want to have a stateful variable in your component - * that persists not only between renders, but also gets pushed to other - * clients that observe this UI. - * - * This makes creation of observable s - * - * @param context React context. - * @param key Key which uniquely identifies this state in Redux store. - * @param initialState Initializes your global variable with this value. - */ -export const useSharedState = ( - context: any, - key: string, - initialState: T -): StateWithSetter => { - const { store } = context; - const state = selectBackend(store.getState()); - const sharedStates = state.shared ?? {}; - const sharedState = key in sharedStates ? sharedStates[key] : initialState; - return [ - sharedState, - (nextState) => { - // prettier-ignore - Byond.sendMessage({ - type: 'setSharedState', - key, - value: JSON.stringify( - typeof nextState === 'function' - ? nextState(sharedState) - : nextState - ) || '', - }); - }, - ]; -}; diff --git a/tgui/packages/tgui_ch/components/AnimatedNumber.tsx b/tgui/packages/tgui_ch/components/AnimatedNumber.tsx deleted file mode 100644 index 53bdba90ab..0000000000 --- a/tgui/packages/tgui_ch/components/AnimatedNumber.tsx +++ /dev/null @@ -1,189 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { clamp, toFixed } from 'common/math'; -import { Component, createRef } from 'inferno'; - -const isSafeNumber = (value: number) => { - // prettier-ignore - return typeof value === 'number' - && Number.isFinite(value) - && !Number.isNaN(value); -}; - -export type AnimatedNumberProps = { - /** - * The target value to approach. - */ - value: number; - - /** - * If provided, the initial value displayed. By default, the same as `value`. - * If `initial` and `value` are different, the component immediately starts - * animating. - */ - initial?: number; - - /** - * If provided, a function that formats the inner string. By default, - * attempts to match the numeric precision of `value`. - */ - format?: (value: number) => string; -}; - -/** - * Animated numbers are animated at roughly 60 frames per second. - */ -const SIXTY_HZ = 1_000.0 / 60.0; - -/** - * The exponential moving average coefficient. Larger values result in a faster - * convergence. - */ -const Q = 0.8333; - -/** - * A small number. - */ -const EPSILON = 10e-4; - -/** - * An animated number label. Shows a number, formatted with an optionally - * provided function, and animates it towards its target value. - */ -export class AnimatedNumber extends Component { - /** - * The inner `` being updated sixty times per second. - */ - ref = createRef(); - - /** - * The interval being used to update the inner span. - */ - interval?: NodeJS.Timeout; - - /** - * The current value. This values approaches the target value. - */ - currentValue: number = 0; - - constructor(props: AnimatedNumberProps) { - super(props); - - const { initial, value } = props; - - if (initial !== undefined && isSafeNumber(initial)) { - this.currentValue = initial; - } else if (isSafeNumber(value)) { - this.currentValue = value; - } - } - - componentDidMount() { - if (this.currentValue !== this.props.value) { - this.startTicking(); - } - } - - componentWillUnmount() { - // Stop animating when the component is unmounted. - this.stopTicking(); - } - - shouldComponentUpdate(newProps: AnimatedNumberProps) { - if (newProps.value !== this.props.value) { - // The target value has been adjusted; start animating if we aren't - // already. - this.startTicking(); - } - - // We render the inner `span` directly using a ref to bypass inferno diffing - // and reach 60 frames per second--tell inferno not to re-render this tree. - return false; - } - - /** - * Starts animating the inner span. If the inner span is already animating, - * this is a no-op. - */ - startTicking() { - if (this.interval !== undefined) { - // We're already ticking; do nothing. - return; - } - - this.interval = setInterval(() => this.tick(), SIXTY_HZ); - } - - /** - * Stops animating the inner span. - */ - stopTicking() { - if (this.interval === undefined) { - // We're not ticking; do nothing. - return; - } - - clearInterval(this.interval); - - this.interval = undefined; - } - - /** - * Steps forward one frame. - */ - tick() { - const { currentValue } = this; - const { value } = this.props; - - if (isSafeNumber(value)) { - // Converge towards the value. - this.currentValue = currentValue * Q + value * (1 - Q); - } else { - // If the value is unsafe, we're never going to converge, so stop ticking. - this.stopTicking(); - } - - if ( - Math.abs(value - this.currentValue) < Math.max(EPSILON, EPSILON * value) - ) { - // We're about as close as we're going to get--snap to the value and - // stop ticking. - this.currentValue = value; - this.stopTicking(); - } - - if (this.ref.current) { - // Directly update the inner span, without bothering inferno. - this.ref.current.textContent = this.getText(); - } - } - - /** - * Gets the inner text of the span. - */ - getText() { - const { props, currentValue } = this; - const { format, value } = props; - - if (!isSafeNumber(value)) { - return String(value); - } - - if (format) { - return format(this.currentValue); - } - - const fraction = String(value).split('.')[1]; - const precision = fraction ? fraction.length : 0; - - return toFixed(currentValue, clamp(precision, 0, 8)); - } - - render() { - return {this.getText()}; - } -} diff --git a/tgui/packages/tgui_ch/components/Autofocus.tsx b/tgui/packages/tgui_ch/components/Autofocus.tsx deleted file mode 100644 index 28945dd7aa..0000000000 --- a/tgui/packages/tgui_ch/components/Autofocus.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, createRef } from 'inferno'; - -export class Autofocus extends Component { - ref = createRef(); - - componentDidMount() { - setTimeout(() => { - this.ref.current?.focus(); - }, 1); - } - - render() { - return ( -
- {this.props.children} -
- ); - } -} diff --git a/tgui/packages/tgui_ch/components/Blink.jsx b/tgui/packages/tgui_ch/components/Blink.jsx deleted file mode 100644 index bd781336b4..0000000000 --- a/tgui/packages/tgui_ch/components/Blink.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import { Component } from 'inferno'; - -const DEFAULT_BLINKING_INTERVAL = 1000; -const DEFAULT_BLINKING_TIME = 1000; - -export class Blink extends Component { - constructor() { - super(); - this.state = { - hidden: false, - }; - } - - createTimer() { - const { - interval = DEFAULT_BLINKING_INTERVAL, - time = DEFAULT_BLINKING_TIME, - } = this.props; - - clearInterval(this.interval); - clearTimeout(this.timer); - - this.setState({ - hidden: false, - }); - - this.interval = setInterval(() => { - this.setState({ - hidden: true, - }); - - this.timer = setTimeout(() => { - this.setState({ - hidden: false, - }); - }, time); - }, interval + time); - } - - componentDidMount() { - this.createTimer(); - } - - componentDidUpdate(prevProps) { - if ( - prevProps.interval !== this.props.interval || - prevProps.time !== this.props.time - ) { - this.createTimer(); - } - } - - componentWillUnmount() { - clearInterval(this.interval); - clearTimeout(this.timer); - } - - render(props) { - return ( - - {props.children} - - ); - } -} diff --git a/tgui/packages/tgui_ch/components/BlockQuote.jsx b/tgui/packages/tgui_ch/components/BlockQuote.jsx deleted file mode 100644 index 8c0f53a46a..0000000000 --- a/tgui/packages/tgui_ch/components/BlockQuote.jsx +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { classes } from 'common/react'; -import { Box } from './Box'; - -export const BlockQuote = (props) => { - const { className, ...rest } = props; - return ; -}; diff --git a/tgui/packages/tgui_ch/components/BodyZoneSelector.tsx b/tgui/packages/tgui_ch/components/BodyZoneSelector.tsx deleted file mode 100644 index cf8dc430e2..0000000000 --- a/tgui/packages/tgui_ch/components/BodyZoneSelector.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { Component, createRef } from 'inferno'; -import { resolveAsset } from '../assets'; -import { Box } from './Box'; - -export enum BodyZone { - Head = 'head', - Chest = 'chest', - LeftArm = 'l_arm', - RightArm = 'r_arm', - LeftLeg = 'l_leg', - RightLeg = 'r_leg', - Eyes = 'eyes', - Mouth = 'mouth', - Groin = 'groin', -} - -const bodyZonePixelToZone = (x: number, y: number): BodyZone | null => { - // TypeScript translation of /atom/movable/screen/zone_sel/proc/get_zone_at - if (y < 1) { - return null; - } else if (y < 10) { - if (x > 10 && x < 15) { - return BodyZone.RightLeg; - } else if (x > 17 && x < 22) { - return BodyZone.LeftLeg; - } - } else if (y < 13) { - if (x > 8 && x < 11) { - return BodyZone.RightArm; - } else if (x > 12 && x < 20) { - return BodyZone.Groin; - } else if (x > 21 && x < 24) { - return BodyZone.LeftArm; - } - } else if (y < 22) { - if (x > 8 && x < 11) { - return BodyZone.RightArm; - } else if (x > 12 && x < 20) { - return BodyZone.Chest; - } else if (x > 21 && x < 24) { - return BodyZone.LeftArm; - } - } else if (y < 30 && x > 12 && x < 20) { - if (y > 23 && y < 24 && x > 15 && x < 17) { - return BodyZone.Mouth; - } else if (y > 25 && y < 27 && x > 14 && x < 18) { - return BodyZone.Eyes; - } else { - return BodyZone.Head; - } - } - - return null; -}; - -type BodyZoneSelectorProps = { - onClick?: (zone: BodyZone) => void; - scale?: number; - selectedZone: BodyZone | null; - theme?: string; -}; - -type BodyZoneSelectorState = { - hoverZone: BodyZone | null; -}; - -export class BodyZoneSelector extends Component< - BodyZoneSelectorProps, - BodyZoneSelectorState -> { - ref = createRef(); - state: BodyZoneSelectorState = { - hoverZone: null, - }; - - render() { - const { hoverZone } = this.state; - const { scale = 3, selectedZone, theme = 'midnight' } = this.props; - - return ( -
- { - const onClick = this.props.onClick; - if (onClick && this.state.hoverZone) { - onClick(this.state.hoverZone); - } - }} - onMouseMove={(event) => { - if (!this.props.onClick) { - return; - } - - const rect = this.ref.current?.getBoundingClientRect(); - if (!rect) { - return; - } - - const x = event.clientX - rect.left; - const y = 32 * scale - (event.clientY - rect.top); - - this.setState({ - hoverZone: bodyZonePixelToZone(x / scale, y / scale), - }); - }} - style={{ - '-ms-interpolation-mode': 'nearest-neighbor', - 'position': 'absolute', - 'width': `${32 * scale}px`, - 'height': `${32 * scale}px`, - }} - /> - - {selectedZone && ( - - )} - - {hoverZone && hoverZone !== selectedZone && ( - - )} -
- ); - } -} diff --git a/tgui/packages/tgui_ch/components/Box.tsx b/tgui/packages/tgui_ch/components/Box.tsx deleted file mode 100644 index 96244d5bd7..0000000000 --- a/tgui/packages/tgui_ch/components/Box.tsx +++ /dev/null @@ -1,294 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { BooleanLike, classes, pureComponentHooks } from 'common/react'; -import { createVNode, InfernoNode, SFC } from 'inferno'; -import { ChildFlags, VNodeFlags } from 'inferno-vnode-flags'; -import { CSS_COLORS } from '../constants'; - -export type BoxProps = { - [key: string]: any; - as?: string; - className?: string | BooleanLike; - children?: InfernoNode; - position?: string | BooleanLike; - overflow?: string | BooleanLike; - overflowX?: string | BooleanLike; - overflowY?: string | BooleanLike; - top?: string | BooleanLike; - bottom?: string | BooleanLike; - left?: string | BooleanLike; - right?: string | BooleanLike; - width?: string | BooleanLike; - minWidth?: string | BooleanLike; - maxWidth?: string | BooleanLike; - height?: string | BooleanLike; - minHeight?: string | BooleanLike; - maxHeight?: string | BooleanLike; - fontSize?: string | BooleanLike; - fontFamily?: string; - lineHeight?: string | BooleanLike; - opacity?: number; - textAlign?: string | BooleanLike; - verticalAlign?: string | BooleanLike; - textTransform?: string | BooleanLike; // VOREStation Addition - inline?: BooleanLike; - bold?: BooleanLike; - italic?: BooleanLike; - nowrap?: BooleanLike; - preserveWhitespace?: BooleanLike; - m?: string | BooleanLike; - mx?: string | BooleanLike; - my?: string | BooleanLike; - mt?: string | BooleanLike; - mb?: string | BooleanLike; - ml?: string | BooleanLike; - mr?: string | BooleanLike; - p?: string | BooleanLike; - px?: string | BooleanLike; - py?: string | BooleanLike; - pt?: string | BooleanLike; - pb?: string | BooleanLike; - pl?: string | BooleanLike; - pr?: string | BooleanLike; - color?: string | BooleanLike; - textColor?: string | BooleanLike; - backgroundColor?: string | BooleanLike; - // VOREStation Addition Start - // Flex props - flexGrow?: string | BooleanLike; - flexWrap?: string | BooleanLike; - flexBasis?: string | BooleanLike; - flex?: string | BooleanLike; - // VOREStation Addition End - fillPositionedParent?: boolean; -}; - -/** - * Coverts our rem-like spacing unit into a CSS unit. - */ -export const unit = (value: unknown): string | undefined => { - if (typeof value === 'string') { - // Transparently convert pixels into rem units - if (value.endsWith('px') && !Byond.IS_LTE_IE8) { - return parseFloat(value) / 12 + 'rem'; - } - return value; - } - if (typeof value === 'number') { - if (Byond.IS_LTE_IE8) { - return value * 12 + 'px'; - } - return value + 'rem'; - } -}; - -/** - * Same as `unit`, but half the size for integers numbers. - */ -export const halfUnit = (value: unknown): string | undefined => { - if (typeof value === 'string') { - return unit(value); - } - if (typeof value === 'number') { - return unit(value * 0.5); - } -}; - -const isColorCode = (str: unknown) => !isColorClass(str); - -const isColorClass = (str: unknown): boolean => { - return typeof str === 'string' && CSS_COLORS.includes(str); -}; - -const mapRawPropTo = (attrName) => (style, value) => { - if (typeof value === 'number' || typeof value === 'string') { - style[attrName] = value; - } -}; - -const mapUnitPropTo = (attrName, unit) => (style, value) => { - if (typeof value === 'number' || typeof value === 'string') { - style[attrName] = unit(value); - } -}; - -const mapBooleanPropTo = (attrName, attrValue) => (style, value) => { - if (value) { - style[attrName] = attrValue; - } -}; - -const mapDirectionalUnitPropTo = (attrName, unit, dirs) => (style, value) => { - if (typeof value === 'number' || typeof value === 'string') { - for (let i = 0; i < dirs.length; i++) { - style[attrName + '-' + dirs[i]] = unit(value); - } - } -}; - -const mapColorPropTo = (attrName) => (style, value) => { - if (isColorCode(value)) { - style[attrName] = value; - } -}; - -const styleMapperByPropName = { - // Direct mapping - position: mapRawPropTo('position'), - overflow: mapRawPropTo('overflow'), - overflowX: mapRawPropTo('overflow-x'), - overflowY: mapRawPropTo('overflow-y'), - top: mapUnitPropTo('top', unit), - bottom: mapUnitPropTo('bottom', unit), - left: mapUnitPropTo('left', unit), - right: mapUnitPropTo('right', unit), - width: mapUnitPropTo('width', unit), - minWidth: mapUnitPropTo('min-width', unit), - maxWidth: mapUnitPropTo('max-width', unit), - height: mapUnitPropTo('height', unit), - minHeight: mapUnitPropTo('min-height', unit), - maxHeight: mapUnitPropTo('max-height', unit), - fontSize: mapUnitPropTo('font-size', unit), - fontFamily: mapRawPropTo('font-family'), - lineHeight: (style, value) => { - if (typeof value === 'number') { - style['line-height'] = value; - } else if (typeof value === 'string') { - style['line-height'] = unit(value); - } - }, - opacity: mapRawPropTo('opacity'), - textAlign: mapRawPropTo('text-align'), - verticalAlign: mapRawPropTo('vertical-align'), - textTransform: mapRawPropTo('text-transform'), // VOREStation Addition - // Boolean props - inline: mapBooleanPropTo('display', 'inline-block'), - bold: mapBooleanPropTo('font-weight', 'bold'), - italic: mapBooleanPropTo('font-style', 'italic'), - nowrap: mapBooleanPropTo('white-space', 'nowrap'), - preserveWhitespace: mapBooleanPropTo('white-space', 'pre-wrap'), - // Margins - m: mapDirectionalUnitPropTo('margin', halfUnit, [ - 'top', - 'bottom', - 'left', - 'right', - ]), - mx: mapDirectionalUnitPropTo('margin', halfUnit, ['left', 'right']), - my: mapDirectionalUnitPropTo('margin', halfUnit, ['top', 'bottom']), - mt: mapUnitPropTo('margin-top', halfUnit), - mb: mapUnitPropTo('margin-bottom', halfUnit), - ml: mapUnitPropTo('margin-left', halfUnit), - mr: mapUnitPropTo('margin-right', halfUnit), - // Margins - p: mapDirectionalUnitPropTo('padding', halfUnit, [ - 'top', - 'bottom', - 'left', - 'right', - ]), - px: mapDirectionalUnitPropTo('padding', halfUnit, ['left', 'right']), - py: mapDirectionalUnitPropTo('padding', halfUnit, ['top', 'bottom']), - pt: mapUnitPropTo('padding-top', halfUnit), - pb: mapUnitPropTo('padding-bottom', halfUnit), - pl: mapUnitPropTo('padding-left', halfUnit), - pr: mapUnitPropTo('padding-right', halfUnit), - // Color props - color: mapColorPropTo('color'), - textColor: mapColorPropTo('color'), - backgroundColor: mapColorPropTo('background-color'), - // VOREStation Addition Start - // Flex props - flexGrow: mapRawPropTo('flex-grow'), - flexWrap: mapRawPropTo('flex-wrap'), - flexBasis: mapRawPropTo('flex-basis'), - flex: mapRawPropTo('flex'), - // VOREStation Addition End - // Utility props - fillPositionedParent: (style, value) => { - if (value) { - style['position'] = 'absolute'; - style['top'] = 0; - style['bottom'] = 0; - style['left'] = 0; - style['right'] = 0; - } - }, -}; - -export const computeBoxProps = (props: BoxProps) => { - const computedProps: HTMLAttributes = {}; - const computedStyles = {}; - // Compute props - for (let propName of Object.keys(props)) { - if (propName === 'style') { - continue; - } - // IE8: onclick workaround - if (Byond.IS_LTE_IE8 && propName === 'onClick') { - computedProps.onclick = props[propName]; - continue; - } - const propValue = props[propName]; - const mapPropToStyle = styleMapperByPropName[propName]; - if (mapPropToStyle) { - mapPropToStyle(computedStyles, propValue); - } else { - computedProps[propName] = propValue; - } - } - // Concatenate styles - let style = ''; - for (let attrName of Object.keys(computedStyles)) { - const attrValue = computedStyles[attrName]; - style += attrName + ':' + attrValue + ';'; - } - if (props.style) { - for (let attrName of Object.keys(props.style)) { - const attrValue = props.style[attrName]; - style += attrName + ':' + attrValue + ';'; - } - } - if (style.length > 0) { - computedProps.style = style; - } - return computedProps; -}; - -export const computeBoxClassName = (props: BoxProps) => { - const color = props.textColor || props.color; - const backgroundColor = props.backgroundColor; - return classes([ - isColorClass(color) && 'color-' + color, - isColorClass(backgroundColor) && 'color-bg-' + backgroundColor, - ]); -}; - -export const Box: SFC = (props: BoxProps) => { - const { as = 'div', className, children, ...rest } = props; - // Render props - if (typeof children === 'function') { - return children(computeBoxProps(props)); - } - const computedClassName = - typeof className === 'string' - ? className + ' ' + computeBoxClassName(rest) - : computeBoxClassName(rest); - const computedProps = computeBoxProps(rest); - // Render a wrapper element - return createVNode( - VNodeFlags.HtmlElement, - as, - computedClassName, - children, - ChildFlags.UnknownChildren, - computedProps, - undefined - ); -}; - -Box.defaultHooks = pureComponentHooks; diff --git a/tgui/packages/tgui_ch/components/Button.jsx b/tgui/packages/tgui_ch/components/Button.jsx deleted file mode 100644 index 58d879d228..0000000000 --- a/tgui/packages/tgui_ch/components/Button.jsx +++ /dev/null @@ -1,365 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { KEY_ENTER, KEY_ESCAPE, KEY_SPACE } from 'common/keycodes'; -import { classes, pureComponentHooks } from 'common/react'; -import { Component, createRef } from 'inferno'; -import { createLogger } from '../logging'; -import { Box, computeBoxClassName, computeBoxProps } from './Box'; -import { Icon } from './Icon'; -import { Tooltip } from './Tooltip'; - -const logger = createLogger('Button'); - -export const Button = (props) => { - const { - className, - fluid, - icon, - iconRotation, - iconSpin, - iconColor, - iconPosition, - iconSize, // VOREStation Addition - color, - disabled, - selected, - tooltip, - tooltipPosition, - ellipsis, - compact, - circular, - content, - children, - onclick, - onClick, - verticalAlignContent, - ...rest - } = props; - const hasContent = !!(content || children); - // A warning about the lowercase onclick - if (onclick) { - logger.warn( - `Lowercase 'onclick' is not supported on Button and lowercase` + - ` prop names are discouraged in general. Please use a camelCase` + - `'onClick' instead and read: ` + - `https://infernojs.org/docs/guides/event-handling` - ); - } - rest.onClick = (e) => { - if (!disabled && onClick) { - onClick(e); - } - }; - // IE8: Use "unselectable" because "user-select" doesn't work. - if (Byond.IS_LTE_IE8) { - rest.unselectable = true; - } - let buttonContent = ( -
{ - if (props.captureKeys === false) { - return; - } - const keyCode = window.event ? e.which : e.keyCode; - // Simulate a click when pressing space or enter. - if (keyCode === KEY_SPACE || keyCode === KEY_ENTER) { - e.preventDefault(); - if (!disabled && onClick) { - onClick(e); - } - return; - } - // Refocus layout on pressing escape. - if (keyCode === KEY_ESCAPE) { - e.preventDefault(); - return; - } - }} - {...computeBoxProps(rest)}> -
- {icon && iconPosition !== 'right' && ( - - )} - {content} - {children} - {icon && iconPosition === 'right' && ( - - )} -
-
- ); - - if (tooltip) { - buttonContent = ( - - {buttonContent} - - ); - } - - return buttonContent; -}; - -Button.defaultHooks = pureComponentHooks; - -export const ButtonCheckbox = (props) => { - const { checked, ...rest } = props; - return ( - - - {buttons && ( -
{buttons}
- )} - - {open && {children}} -
- ); - } -} diff --git a/tgui/packages/tgui_ch/components/ColorBox.jsx b/tgui/packages/tgui_ch/components/ColorBox.jsx deleted file mode 100644 index a6203ca469..0000000000 --- a/tgui/packages/tgui_ch/components/ColorBox.jsx +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { classes, pureComponentHooks } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; - -export const ColorBox = (props) => { - // prettier-ignore - const { - content, - children, - className, - color, - backgroundColor, - ...rest - } = props; - rest.color = content ? null : 'transparent'; - rest.backgroundColor = color || backgroundColor; - return ( -
- {content || '.'} -
- ); -}; - -ColorBox.defaultHooks = pureComponentHooks; diff --git a/tgui/packages/tgui_ch/components/Dialog.tsx b/tgui/packages/tgui_ch/components/Dialog.tsx deleted file mode 100644 index 277a03b284..0000000000 --- a/tgui/packages/tgui_ch/components/Dialog.tsx +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @file - * @copyright 2022 raffclar - * @license MIT - */ -import { Box } from './Box'; -import { Button } from './Button'; - -type DialogProps = { - title: any; - onClose: () => void; - children: any; - width?: string; - height?: string; -}; - -export const Dialog = (props: DialogProps) => { - const { title, onClose, children, width, height } = props; - return ( -
- -
-
{title}
- -
- {children} -
-
- ); -}; - -type DialogButtonProps = { - onClick: () => void; - children: any; -}; - -const DialogButton = (props: DialogButtonProps) => { - const { onClick, children } = props; - return ( - - ); -}; - -Dialog.Button = DialogButton; - -type UnsavedChangesDialogProps = { - documentName: string; - onSave: () => void; - onDiscard: () => void; - onClose: () => void; -}; - -export const UnsavedChangesDialog = (props: UnsavedChangesDialogProps) => { - const { documentName, onSave, onDiscard, onClose } = props; - return ( - -
- Do you want to save changes to {documentName}? -
-
- Save - Don't Save - Cancel -
-
- ); -}; diff --git a/tgui/packages/tgui_ch/components/Dimmer.jsx b/tgui/packages/tgui_ch/components/Dimmer.jsx deleted file mode 100644 index 85e046ca0d..0000000000 --- a/tgui/packages/tgui_ch/components/Dimmer.jsx +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { classes } from 'common/react'; -import { Box } from './Box'; - -export const Dimmer = (props) => { - const { className, children, ...rest } = props; - return ( - -
{children}
-
- ); -}; diff --git a/tgui/packages/tgui_ch/components/Divider.jsx b/tgui/packages/tgui_ch/components/Divider.jsx deleted file mode 100644 index 8cbf9b77d7..0000000000 --- a/tgui/packages/tgui_ch/components/Divider.jsx +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { classes } from 'common/react'; - -export const Divider = (props) => { - const { vertical, hidden } = props; - return ( - - ); - } -} diff --git a/tgui/packages/tgui_ch/components/Input.jsx b/tgui/packages/tgui_ch/components/Input.jsx deleted file mode 100644 index ac7ce6eef3..0000000000 --- a/tgui/packages/tgui_ch/components/Input.jsx +++ /dev/null @@ -1,156 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { KEY_ENTER, KEY_ESCAPE } from 'common/keycodes'; -import { classes } from 'common/react'; -import { Component, createRef } from 'inferno'; -import { Box } from './Box'; - -// prettier-ignore -export const toInputValue = value => ( - typeof value !== 'number' && typeof value !== 'string' - ? '' - : String(value) -); - -export class Input extends Component { - constructor() { - super(); - this.inputRef = createRef(); - this.state = { - editing: false, - }; - this.handleInput = (e) => { - const { editing } = this.state; - const { onInput } = this.props; - if (!editing) { - this.setEditing(true); - } - if (onInput) { - onInput(e, e.target.value); - } - }; - this.handleFocus = (e) => { - const { editing } = this.state; - if (!editing) { - this.setEditing(true); - } - }; - this.handleBlur = (e) => { - const { editing } = this.state; - const { onChange } = this.props; - if (editing) { - this.setEditing(false); - if (onChange) { - onChange(e, e.target.value); - } - } - }; - this.handleKeyDown = (e) => { - const { onInput, onChange, onEnter } = this.props; - if (e.keyCode === KEY_ENTER) { - this.setEditing(false); - if (onChange) { - onChange(e, e.target.value); - } - if (onInput) { - onInput(e, e.target.value); - } - if (onEnter) { - onEnter(e, e.target.value); - } - if (this.props.selfClear) { - e.target.value = ''; - } else { - e.target.blur(); - } - return; - } - if (e.keyCode === KEY_ESCAPE) { - if (this.props.onEscape) { - this.props.onEscape(e); - return; - } - - this.setEditing(false); - e.target.value = toInputValue(this.props.value); - e.target.blur(); - return; - } - }; - } - - componentDidMount() { - const nextValue = this.props.value; - const input = this.inputRef.current; - if (input) { - input.value = toInputValue(nextValue); - } - - if (this.props.autoFocus || this.props.autoSelect) { - setTimeout(() => { - input.focus(); - - if (this.props.autoSelect) { - input.select(); - } - }, 1); - } - } - - componentDidUpdate(prevProps, prevState) { - const { editing } = this.state; - const prevValue = prevProps.value; - const nextValue = this.props.value; - const input = this.inputRef.current; - if (input && !editing && prevValue !== nextValue) { - input.value = toInputValue(nextValue); - } - } - - setEditing(editing) { - this.setState({ editing }); - } - - render() { - const { props } = this; - // Input only props - const { - selfClear, - onInput, - onChange, - onEnter, - value, - maxLength, - placeholder, - ...boxProps - } = props; - // Box props - const { className, fluid, monospace, ...rest } = boxProps; - return ( - -
.
- -
- ); - } -} diff --git a/tgui/packages/tgui_ch/components/KeyListener.tsx b/tgui/packages/tgui_ch/components/KeyListener.tsx deleted file mode 100644 index 62509cae96..0000000000 --- a/tgui/packages/tgui_ch/components/KeyListener.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Component } from 'inferno'; -import { KeyEvent } from '../events'; -import { listenForKeyEvents } from '../hotkeys'; - -type KeyListenerProps = Partial<{ - onKey: (key: KeyEvent) => void; - onKeyDown: (key: KeyEvent) => void; - onKeyUp: (key: KeyEvent) => void; -}>; - -export class KeyListener extends Component { - dispose: () => void; - - constructor() { - super(); - - this.dispose = listenForKeyEvents((key) => { - if (this.props.onKey) { - this.props.onKey(key); - } - - if (key.isDown() && this.props.onKeyDown) { - this.props.onKeyDown(key); - } - - if (key.isUp() && this.props.onKeyUp) { - this.props.onKeyUp(key); - } - }); - } - - componentWillUnmount() { - this.dispose(); - } - - render() { - return null; - } -} diff --git a/tgui/packages/tgui_ch/components/Knob.jsx b/tgui/packages/tgui_ch/components/Knob.jsx deleted file mode 100644 index 1d40ff1ed2..0000000000 --- a/tgui/packages/tgui_ch/components/Knob.jsx +++ /dev/null @@ -1,138 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { keyOfMatchingRange, scale } from 'common/math'; -import { classes } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; -import { DraggableControl } from './DraggableControl'; -import { NumberInput } from './NumberInput'; - -export const Knob = (props) => { - // IE8: I don't want to support a yet another component on IE8. - // IE8: It also can't handle SVG. - if (Byond.IS_LTE_IE8) { - return ; - } - const { - // Draggable props (passthrough) - animated, - format, - maxValue, - minValue, - unclamped, - onChange, - onDrag, - step, - stepPixelSize, - suppressFlicker, - unit, - value, - // Own props - className, - style, - fillValue, - color, - ranges = {}, - size = 1, - bipolar, - children, - ...rest - } = props; - return ( - - {(control) => { - const { - dragging, - editing, - value, - displayValue, - displayElement, - inputElement, - handleDragStart, - } = control; - const scaledFillValue = scale( - fillValue ?? displayValue, - minValue, - maxValue - ); - const scaledDisplayValue = scale(displayValue, minValue, maxValue); - const effectiveColor = - color || keyOfMatchingRange(fillValue ?? value, ranges) || 'default'; - const rotation = Math.min((scaledDisplayValue - 0.5) * 270, 225); - return ( -
-
-
-
-
-
- {dragging && ( -
{displayElement}
- )} - - - - - - - {inputElement} -
- ); - }} - - ); -}; diff --git a/tgui/packages/tgui_ch/components/LabeledControls.jsx b/tgui/packages/tgui_ch/components/LabeledControls.jsx deleted file mode 100644 index eea3b2c29b..0000000000 --- a/tgui/packages/tgui_ch/components/LabeledControls.jsx +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { Flex } from './Flex'; - -export const LabeledControls = (props) => { - const { children, wrap, ...rest } = props; - return ( - - {children} - - ); -}; - -const LabeledControlsItem = (props) => { - const { label, children, mx = 1, ...rest } = props; - return ( - - - - {children} - {label} - - - ); -}; - -LabeledControls.Item = LabeledControlsItem; diff --git a/tgui/packages/tgui_ch/components/LabeledList.tsx b/tgui/packages/tgui_ch/components/LabeledList.tsx deleted file mode 100644 index 283c0a2b91..0000000000 --- a/tgui/packages/tgui_ch/components/LabeledList.tsx +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { BooleanLike, classes, pureComponentHooks } from 'common/react'; -import { InfernoNode } from 'inferno'; -import { Box, unit } from './Box'; -import { Divider } from './Divider'; - -type LabeledListProps = { - children?: any; -}; - -export const LabeledList = (props: LabeledListProps) => { - const { children } = props; - return {children}
; -}; - -LabeledList.defaultHooks = pureComponentHooks; - -type LabeledListItemProps = { - className?: string | BooleanLike; - label?: string | InfernoNode | BooleanLike; - labelColor?: string | BooleanLike; - labelWrap?: boolean; - color?: string | BooleanLike; - textAlign?: string | BooleanLike; - buttons?: InfernoNode; - /** @deprecated */ - content?: any; - children?: InfernoNode; - verticalAlign?: string; -}; - -const LabeledListItem = (props: LabeledListItemProps) => { - const { - className, - label, - labelColor = 'label', - labelWrap, - color, - textAlign, - buttons, - content, - children, - verticalAlign = 'baseline', - } = props; - return ( - - - {label ? (typeof label === 'string' ? label + ':' : label) : null} - - - {content} - {children} - - {buttons && ( - {buttons} - )} - - ); -}; - -LabeledListItem.defaultHooks = pureComponentHooks; - -type LabeledListDividerProps = { - size?: number; -}; - -const LabeledListDivider = (props: LabeledListDividerProps) => { - const padding = props.size ? unit(Math.max(0, props.size - 1)) : 0; - return ( - - - - - - ); -}; - -LabeledListDivider.defaultHooks = pureComponentHooks; - -LabeledList.Item = LabeledListItem; -LabeledList.Divider = LabeledListDivider; diff --git a/tgui/packages/tgui_ch/components/MenuBar.tsx b/tgui/packages/tgui_ch/components/MenuBar.tsx deleted file mode 100644 index 35de61ec9c..0000000000 --- a/tgui/packages/tgui_ch/components/MenuBar.tsx +++ /dev/null @@ -1,231 +0,0 @@ -/** - * @file - * @copyright 2022 Aleksej Komarov - * @license MIT - */ - -import { classes } from 'common/react'; -import { Component, createRef, InfernoNode, RefObject } from 'inferno'; -import { Box } from './Box'; -import { logger } from '../logging'; -import { Icon } from './Icon'; - -type MenuProps = { - children: any; - width: string; - menuRef: RefObject; - onOutsideClick: () => void; -}; - -class Menu extends Component { - private readonly handleClick: (event) => void; - - constructor(props) { - super(props); - this.handleClick = (event) => { - if (!this.props.menuRef.current) { - logger.log(`Menu.handleClick(): No ref`); - return; - } - - if (this.props.menuRef.current.contains(event.target)) { - logger.log(`Menu.handleClick(): Inside`); - } else { - logger.log(`Menu.handleClick(): Outside`); - this.props.onOutsideClick(); - } - }; - } - - // eslint-disable-next-line react/no-deprecated - componentWillMount() { - window.addEventListener('click', this.handleClick); - } - - componentWillUnmount() { - window.removeEventListener('click', this.handleClick); - } - - render() { - const { width, children } = this.props; - return ( -
- {children} -
- ); - } -} - -type MenuBarDropdownProps = { - open: boolean; - openWidth: string; - children: any; - disabled?: boolean; - display: any; - onMouseOver: () => void; - onClick: () => void; - onOutsideClick: () => void; - className?: string; -}; - -class MenuBarButton extends Component { - private readonly menuRef: RefObject; - - constructor(props) { - super(props); - this.menuRef = createRef(); - } - - render() { - const { props } = this; - const { - open, - openWidth, - children, - disabled, - display, - onMouseOver, - onClick, - onOutsideClick, - ...boxProps - } = props; - const { className, ...rest } = boxProps; - - return ( -
- - {display} - - {open && ( - - {children} - - )} -
- ); - } -} - -type MenuBarItemProps = { - entry: string; - children: any; - openWidth: string; - display: InfernoNode; - setOpenMenuBar: (entry: string | null) => void; - openMenuBar: string | null; - setOpenOnHover: (flag: boolean) => void; - openOnHover: boolean; - disabled?: boolean; - className?: string; -}; - -export const Dropdown = (props: MenuBarItemProps) => { - const { - entry, - children, - openWidth, - display, - setOpenMenuBar, - openMenuBar, - setOpenOnHover, - openOnHover, - disabled, - className, - } = props; - - return ( - { - const open = openMenuBar === entry ? null : entry; - setOpenMenuBar(open); - setOpenOnHover(!openOnHover); - }} - onOutsideClick={() => { - setOpenMenuBar(null); - setOpenOnHover(false); - }} - onMouseOver={() => { - if (openOnHover) { - setOpenMenuBar(entry); - } - }}> - {children} - - ); -}; - -const MenuItemToggle = (props) => { - const { value, displayText, onClick, checked } = props; - return ( - onClick(value)}> -
- {checked && } -
- {displayText} -
- ); -}; - -Dropdown.MenuItemToggle = MenuItemToggle; - -const MenuItem = (props) => { - const { value, displayText, onClick } = props; - return ( - onClick(value)}> - {displayText} - - ); -}; - -Dropdown.MenuItem = MenuItem; - -const Separator = () => { - return
; -}; - -Dropdown.Separator = Separator; - -type MenuBarProps = { - children: any; -}; - -export const MenuBar = (props: MenuBarProps) => { - const { children } = props; - return {children}; -}; - -MenuBar.Dropdown = Dropdown; diff --git a/tgui/packages/tgui_ch/components/Modal.jsx b/tgui/packages/tgui_ch/components/Modal.jsx deleted file mode 100644 index 54c8c090ec..0000000000 --- a/tgui/packages/tgui_ch/components/Modal.jsx +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { classes } from 'common/react'; -import { computeBoxClassName, computeBoxProps } from './Box'; -import { Dimmer } from './Dimmer'; - -export const Modal = (props) => { - const { className, children, onEnter, ...rest } = props; - // VOREStation Addition start - let handleKeyDown; - if (onEnter) { - handleKeyDown = (e) => { - let key = e.which || e.keyCode; - if (key === 13) { - onEnter(e); - } - }; - } - // VOREStation Addition end - return ( - -
- {children} -
-
- ); -}; diff --git a/tgui/packages/tgui_ch/components/NanoMap.jsx b/tgui/packages/tgui_ch/components/NanoMap.jsx deleted file mode 100644 index 4ee5199119..0000000000 --- a/tgui/packages/tgui_ch/components/NanoMap.jsx +++ /dev/null @@ -1,223 +0,0 @@ -import { Component } from 'inferno'; -import { Box, Button, Icon, Tooltip, LabeledList, Slider } from '.'; -import { useBackend } from '../backend'; - -const pauseEvent = (e) => { - if (e.stopPropagation) { - e.stopPropagation(); - } - if (e.preventDefault) { - e.preventDefault(); - } - e.cancelBubble = true; - e.returnValue = false; - return false; -}; - -const zoomScale = 280; - -export class NanoMap extends Component { - constructor(props) { - super(props); - - // Auto center based on window size - const Xcenter = window.innerWidth / 2 - 256; - const Ycenter = window.innerHeight / 2 - 256; - - this.state = { - offsetX: Xcenter, - offsetY: Ycenter, - transform: 'none', - dragging: false, - originX: null, - originY: null, - zoom: 1, - }; - - // Dragging - this.handleDragStart = (e) => { - this.ref = e.target; - this.setState({ - dragging: false, - originX: e.screenX, - originY: e.screenY, - }); - document.addEventListener('mousemove', this.handleDragMove); - document.addEventListener('mouseup', this.handleDragEnd); - pauseEvent(e); - }; - - this.handleDragMove = (e) => { - this.setState((prevState) => { - const state = { ...prevState }; - const newOffsetX = e.screenX - state.originX; - const newOffsetY = e.screenY - state.originY; - if (prevState.dragging) { - state.offsetX += newOffsetX; - state.offsetY += newOffsetY; - state.originX = e.screenX; - state.originY = e.screenY; - } else { - state.dragging = true; - } - return state; - }); - pauseEvent(e); - }; - - this.handleDragEnd = (e) => { - this.setState({ - dragging: false, - originX: null, - originY: null, - }); - document.removeEventListener('mousemove', this.handleDragMove); - document.removeEventListener('mouseup', this.handleDragEnd); - pauseEvent(e); - }; - - this.handleOnClick = (e) => { - let byondX = e.offsetX / this.state.zoom / zoomScale; - let byondY = 1 - e.offsetY / this.state.zoom / zoomScale; // Byond origin is bottom left, this is top left - - e.byondX = byondX; - e.byondY = byondY; - if (typeof this.props.onClick === 'function') { - this.props.onClick(e); - } - }; - - this.handleZoom = (_e, value) => { - this.setState((state) => { - const newZoom = Math.min(Math.max(value, 1), 8); - let zoomDiff = (newZoom - state.zoom) * 1.5; - state.zoom = newZoom; - - let newOffsetX = state.offsetX - 262 * zoomDiff; - if (newOffsetX < -500) { - newOffsetX = -500; - } - if (newOffsetX > 500) { - newOffsetX = 500; - } - - let newOffsetY = state.offsetY - 256 * zoomDiff; - if (newOffsetY < -200) { - newOffsetY = -200; - } - if (newOffsetY > 200) { - newOffsetY = 200; - } - - state.offsetX = newOffsetX; - state.offsetY = newOffsetY; - if (props.onZoom) { - props.onZoom(state.zoom); - } - return state; - }); - }; - } - - render() { - const { config } = useBackend(this.context); - const { dragging, offsetX, offsetY, zoom = 1 } = this.state; - const { children } = this.props; - - const mapUrl = config.map + '_nanomap_z' + config.mapZLevel + '.png'; - // (x * zoom), x Needs to be double the turf- map size. (for virgo, 140x140) - const mapSize = zoomScale * zoom + 'px'; - const newStyle = { - width: mapSize, - height: mapSize, - 'margin-top': offsetY + 'px', - 'margin-left': offsetX + 'px', - 'overflow': 'hidden', - 'position': 'relative', - 'background-image': 'url(' + mapUrl + ')', - 'background-size': 'cover', - 'background-repeat': 'no-repeat', - 'text-align': 'center', - 'cursor': dragging ? 'move' : 'auto', - }; - - return ( - - - {children} - - - - ); - } -} - -const NanoMapMarker = (props, context) => { - const { x, y, zoom = 1, icon, tooltip, color, onClick } = props; - - const handleOnClick = (e) => { - pauseEvent(e); - if (onClick) { - onClick(e); - } - }; - - const rx = x * 2 * zoom - zoom - 3; - const ry = y * 2 * zoom - zoom - 3; - return ( -
- - - - -
- ); -}; - -NanoMap.Marker = NanoMapMarker; - -const NanoMapZoomer = (props, context) => { - const { act, config, data } = useBackend(context); - return ( - - - - v + 'x'} - value={props.zoom} - onDrag={(e, v) => props.onZoom(e, v)} - /> - - - {data.map_levels - .sort((a, b) => Number(a) - Number(b)) - .map((level) => ( -