tgui update (#17404)

* tgui update

* min version up
This commit is contained in:
Kashargul
2025-03-22 22:41:09 +01:00
committed by GitHub
parent c03f7978a0
commit a87dc67609
20 changed files with 190 additions and 3052 deletions
-24
View File
@@ -1,24 +0,0 @@
# VChat
(Please add to this file as you learn how this thing works. Thank you!)
## Development
To implement changes to VChat, one must modify either vchat.js or vchat_client,
where vchat.js corresponds to what actually appears to the user.
Not all of the logic is isolated within vchat_client, vchat.js handles a significant amount of processing as well.
### vchat.js
vchat.js is a development file - it is not actually included in the actual game code. Instead, what the game expects is
the minified version "vchat.min.js"
Therefore, to have your changes in "vchat.js" apply to the game for either PR or testing - you must first minify your script.
If you are unfamiliar how to, simply you copy the file contants in vchat.js, paste them into https://codebeautify.org/minify-js
or any similar tool and paste its output into vchat.min.js .
As of 2023/08/05, no tool is provided by the codebase to handle minification for the developer.
### ss13styles.css
Handles chat colours, background colours, filtering.
Please keep this file synchronized with code\stylesheet.dm where possible (filters, lightmode colours).
-120
View File
@@ -1,120 +0,0 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="semantic.min.css" />
<link rel="stylesheet" type="text/css" href="vchat-font-embedded.css" />
<link rel="stylesheet" type="text/css" href="ss13styles.css" />
</head>
<body>
<div class="ui top fixed pointing menu">
<div class="item">
Main
</div>
<div class="item">
OOC
<div class="ui top right attached red label">15</div>
</div>
<div class="right menu">
<div class="item" style="cursor: pointer;" title="New Tab"><i class="icon-folder-add"></i></div>
<div class="item" style="cursor: pointer;" title="Pause Autoscroll">
<i class="icon-pause-outline" :class="{ blinkwarn: paused }"></i>
</div>
<div class="item" style="cursor: pointer;" title="Edit Mode">
<i class="icon-cog-outline" :class="{ blinkwarn: editing }"></i>
</div>
<div class="item" style="padding-left: 0px !important;"><span class="ui circular label" title="VChat Latency (Not exactly network latency)" :class="ping_classes">{{latency}}ms</span></div>
</div>
</div>
<div id="contentbox">
<div class="ui segment">
<span class='game say'><b>Test Person</b> says, "Testing say message."</span><br>
<span class='notice'>Testing notice message.</span><br>
<span class='danger'>Testing danger message.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message."</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message.</span></span><br>
<span class='looc'>Testing LOOC message.</span><br>
<span class='rlooc'>Testing RLOOC message.</span><br>
<span class='admin_channel'>Testing asay message.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 2."</span><br>
<span class='notice'>Testing notice message 2.</span><br>
<span class='danger'>Testing danger message 2.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 2".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 2.</span></span><br>
<span class='looc'>Testing LOOC message 2.</span><br>
<span class='rlooc'>Testing RLOOC message 2.</span><br>
<span class='admin_channel'>Testing asay message 2.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 3."</span><br>
<span class='notice'>Testing notice message 3.</span><br>
<span class='danger'>Testing danger message 3.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 3".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 3.</span></span><br>
<span class='looc'>Testing LOOC message 3.</span><br>
<span class='rlooc'>Testing RLOOC message 3.</span><br>
<span class='admin_channel'>Testing asay message 3.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 4."</span><br>
<span class='notice'>Testing notice message 4.</span><br>
<span class='danger'>Testing danger message 4.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 4".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 4.</span></span><br>
<span class='looc'>Testing LOOC message 4.</span><br>
<span class='rlooc'>Testing RLOOC message 4.</span><br>
<span class='admin_channel'>Testing asay message 4.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 5."</span><br>
<span class='notice'>Testing notice message 5.</span><br>
<span class='danger'>Testing danger message 5.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 5".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 5.</span></span><br>
<span class='looc'>Testing LOOC message 5.</span><br>
<span class='rlooc'>Testing RLOOC message 5.</span><br>
<span class='admin_channel'>Testing asay message 5.</span><br>
</div>
<div class="ui segment inverted">
<span class='game say'><b>Test Person</b> says, "Testing say message."</span><br>
<span class='notice'>Testing notice message.</span><br>
<span class='danger'>Testing danger message.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message."</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message.</span></span><br>
<span class='looc'>Testing LOOC message.</span><br>
<span class='rlooc'>Testing RLOOC message.</span><br>
<span class='admin_channel'>Testing asay message.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 2."</span><br>
<span class='notice'>Testing notice message 2.</span><br>
<span class='danger'>Testing danger message 2.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 2".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 2.</span></span><br>
<span class='looc'>Testing LOOC message 2.</span><br>
<span class='rlooc'>Testing RLOOC message 2.</span><br>
<span class='admin_channel'>Testing asay message 2.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 3."</span><br>
<span class='notice'>Testing notice message 3.</span><br>
<span class='danger'>Testing danger message 3.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 3".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 3.</span></span><br>
<span class='looc'>Testing LOOC message 3.</span><br>
<span class='rlooc'>Testing RLOOC message 3.</span><br>
<span class='admin_channel'>Testing asay message 3.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 4."</span><br>
<span class='notice'>Testing notice message 4.</span><br>
<span class='danger'>Testing danger message 4.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 4".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 4.</span></span><br>
<span class='looc'>Testing LOOC message 4.</span><br>
<span class='rlooc'>Testing RLOOC message 4.</span><br>
<span class='admin_channel'>Testing asay message 4.</span><br>
<span class='game say'><b>Test Person</b> says, "Testing say message 5."</span><br>
<span class='notice'>Testing notice message 5.</span><br>
<span class='danger'>Testing danger message 5.</span><br>
<span class='secradio'>[Security] <b>Secu Person</b> says, "Testing radio message 5".</span><br>
<span class='ooc'><span class='everyone'>Testing OOC message 5.</span></span><br>
<span class='looc'>Testing LOOC message 5.</span><br>
<span class='rlooc'>Testing RLOOC message 5.</span><br>
<span class='admin_channel'>Testing asay message 5.</span><br>
</div>
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-270
View File
@@ -1,270 +0,0 @@
/* VChat Styles */
body.inverted {
background-color: #111111;
}
#topmenu {
overflow-x: auto;
overflow-y: hidden;
}
#contentbox {
margin-top: 3.3rem; /* Make room for the fixed top menu */
overflow-wrap: break-word;
word-wrap: break-word; /* IE, blah */
}
.menu, .item {
padding-top: 0.2em !important;
padding-bottom: 0.2em !important;
}
.ui.menu .item > .label:not(.floating) {
margin-left: 0;
padding-bottom: 0;
padding-top: 0;
text-align: center;
font-size: 10px;
}
.item {
cursor: pointer;
}
.inputbox {
width: 5em !important;
padding: 0.1em !important;
}
.icon-left-open-outline:hover, .icon-right-open-outline:hover, .icon-cancel-circled-outline:hover {
color: red;
}
.blinkwarn {
color: #FF0000;
animation: blink-animation 1s steps(5, start) infinite;
}
@keyframes blink-animation {
to {
visibility: hidden;
}
}
/* SS13 Styles */
#messagebox {font-family: Verdana, sans-serif;}
#messagebox h1, #messagebox h2, #messagebox h3, #messagebox h4, #messagebox h5, #messagebox h6 {color: #0000ff; font-family: Georgia, Verdana, sans-serif;}
#messagebox em {font-style: normal; font-weight: bold;}
#messagebox a {text-decoration: underline;}
.motd {color: #638500;font-family: Verdana, sans-serif;}
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6
{color: #638500;text-decoration: underline;}
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover
{color: #638500;}
.prefix {font-weight: bold;}
.log_message {color: #386AFF; font-weight: bold;}
/*.inverted .message {color: #386AFF; font-weight: bold;}*/
/* OOC */
.ooc {font-weight: bold;}
.ooc img.text_tag {width: 32px; height: 10px;}
.ooc .everyone {color: #002eb8;}
.inverted .ooc .everyone {color: #004ed8;} /* Dark mode */
.looc {color: #3A9696; font-weight: bold}
.rlooc {color: #3ABB96; font-weight: bold}
.ooc .elevated {color: #2e78d9;}
.ooc .moderator {color: #184880;}
.ooc .developer {color: #1b521f;}
.ooc .admin {color: #b82e00;}
.ooc .event_manager {color: #660033;}
.ooc .aooc {color: #960018;}
/* Admin: Private Messages */
.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;}
.pm .in {color: #ff0000;}
.pm .out {color: #ff0000;}
.pm .other {color: #0000ff;}
/* Admin: Channels */
.mentor {color: #808000;}
.mentor_channel {color: #808000; font-weight: bold;}
.mod_channel {color: #735638; font-weight: bold;}
.mod_channel .admin {color: #b82e00; font-weight: bold;}
.admin_channel {color: #9611D4; font-weight: bold;}
.event_channel {color: #cc3399; font-weight: bold;}
/* Radio: Misc */
.deadsay {color: #530FAD;}
.inverted .deadsay {color: #732FCD;} /* Dark mode */
.radio {color: #008000;}
.inverted .radio {color: #00a800;} /* Dark mode */
.deptradio {color: #ff00ff;} /* when all other department colors fail */
.newscaster {color: #750000;}
/* Radio Channels */
.comradio {color: #193A7A;}
.inverted .comradio {color: #395A9A;} /* Dark mode */
.syndradio {color: #6D3F40;}
.centradio {color: #5C5C8A;}
.airadio {color: #FF00FF;}
.entradio {color: #339966;}
.secradio {color: #A30000;}
.engradio {color: #A66300;}
.medradio {color: #008160;}
.sciradio {color: #993399;}
.supradio {color: #5F4519;}
.srvradio {color: #6eaa2c;}
.expradio {color: #555555;}
/* Miscellaneous */
.name {font-weight: bold;}
.say {color: #000000;}
.inverted .say {color: #FFFFFF;}
.emote {color: #000000;}
.inverted .emote {color: #FFFFFF;}
.alert {color: #ff0000;}
.valert {color: #ff0000;}
h1.alert, h2.alert {color: #000000;}
/* VOREStation Add Start */
.nif {}
.psay {color: #800080;font-style: italic;}
.inverted .psay {color: #e300e4;font-style: italic;}
.pemote {color: #800080;font-style: italic;}
.inverted .pemote {color: #e300e4;font-style: italic;}
/* VOREStation Add End */
/* Game Messages */
.attack {color: #ff0000;}
.moderate {color: #CC0000;}
.disarm {color: #990000;}
.passive {color: #660000;}
.critical {color: #ff0000; font-weight: bold; font-size: 150%;}
.danger {color: #ff0000; font-weight: bold;}
.vdanger {color: #ff0000; font-weight: bold;}
.warning {color: #ff0000; font-style: italic;}
.vwarning {color: #ff0000; font-style: italic;}
.rose {color: #ff5050;}
.info {color: #0000CC;}
.inverted .info {color: #6060c9;} /* Dark mode */
.notice {color: #000099;}
.inverted .notice {color: #6060c9;} /* Dark mode */
.vnotice {color: #000099;}
.inverted .vnotice {color: #6060c9;} /* Dark mode */
.alium {color: #00ff00;}
.cult {color: #800080; font-weight: bold; font-style: italic;}
.reflex_shoot {color: #000099; font-style: italic;}
/* Languages */
.alien {color: #543354;font-style: italic;}
.tajaran {color: #803B56;}
.tajaran_signlang {color: #941C1C;}
.akhani {color: #AC398C;}
.skrell {color: #00B0B3;}
.skrellfar {color: #70FCFF;}
.soghun {color: #50BA6C;}
.solcom {color: #3333CE;}
.inverted .solcom {color: #6da6f0;}
.changeling {color: #800080;font-style: italic;}
.inverted .changeling {color: #b000b1;}
.sergal {color: #0077FF;}
.birdsongc {color: #CC9900;}
.vulpkanin {color: #B97A57;}
.tavan {color: #f54298; font-family: Arial}
.echosong {color: #826D8C;}
.enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;}
.daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;}
.drudakar {color: #bb2463; word-spacing:0pt; font-family: "High Tower Text", monospace;}
.bug {color: #9e9e39;}
.vox {color: #AA00AA;}
.promethean {color: #5A5A5A; font-family:"Comic Sans MS","Comic Sans",cursive;}
.inverted .promethean {color: #A5A5A5; font-family:"Comic Sans MS","Comic Sans",cursive;}
.zaddat {color: #941C1C;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.say_quote_italics {font-style: italic; font-family: Georgia, Verdana, sans-serif;}
.terminus {font-family: "Times New Roman", Times, serif, sans-serif}
.interface {color: #330033;}
.psionic {color: #993399;}
.wingdings {color: #0077FF;font-family: Wingdings, Webdings}
.spacer {color: #9c660b;} /* VOREStation Add */
.blob {color: #ff950d; font-weight: bold; font-style: italic;}
.teppi {color: #816540; word-spacing:4pt; font-family: "Segoe Script Bold","Segoe Script",sans-serif,Verdana;}
.shadekin {color: #be3cc5; font-size: 150%; font-weight: bold; font-family: "Gabriola", cursive, sans-serif;}
.black {color: #000000;}
.darkgray {color: #808080;}
.gray {color: #A9A9A9;}
.red {color: #FF0000;}
.orange {color: #FF8C00;}
.blue {color: #0000FF;}
.green {color: #00DD00;}
.inverted .black {color: #606060;}
.inverted .darkgray {color: #808080;}
.inverted .gray {color: #A9A9A9;}
.inverted .red {color: #FF4444;}
.inverted .orange {color: #FF8C00;}
.inverted .blue {color: #6666FF;}
.inverted .green {color: #44FF44;}
.pnarrate {color: #009AB2;}
/*BIG IMG.icon {width: 32px; height: 32px;}*/
img.icon {vertical-align: middle; max-height: 1em;}
img.icon.bigicon {max-height: 32px;}
/* Zoom levels - Replaced with arbitrary font sizes
.zoom_normal {
font-size: 0.9em;
line-height: 1.35;
}
.zoom_more {
font-size: 1.2em;
line-height: 1.4;
}
.zoom_less {
font-size: 0.8em;
line-height: 1.2;
}
*/
/* Debug Logs */
.debug_error {color:#FF0000; font-weight:bold}
.debug_warning {color:#FF0000;}
.debug_info {color:#000000;}
.inverted .debug_info {color: #FFFFFF;}
.debug_debug {color:#0000FF;}
.debug_trace {color:#888888;}
/* Log animations */
.msgsanim-enter-active {
transition: opacity 0.5s, transform 0.5s;
}
.msgsanim-enter {
opacity: 0;
transform: translateX(15px);
}
/* Dog mode */
.woof {
background-color: rgba(255,255,255,0) !important;
background-image: url('dog.gif') !important;
background-size: cover !important;
transition: background-color 15s;
}
.woof div, .woof span {
background-color: rgba(0,0,0,0) !important;
transition: background-color 15s;
}
File diff suppressed because one or more lines are too long
-191
View File
@@ -1,191 +0,0 @@
<!DOCTYPE html>
<html debug="true">
<head>
<title>VChat</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- Styles -->
<link rel="stylesheet" type="text/css" href="semantic.min.css" />
<link rel="stylesheet" type="text/css" href="vchat-font-embedded.css" />
<link rel="stylesheet" type="text/css" href="ss13styles.css" />
<!-- Important scripts -->
<script type="text/javascript" src="polyfills.min.js"></script>
<script type="text/javascript" src="vue.min.js"></script>
<script type="text/javascript" src="vchat.min.js"></script>
</head>
<body>
<div id="loader">
<p>You probably shouldn't see this page. This generally means chat is very broken.</p>
<p>You can wait a few seconds to see if it loads, or try OOC > Reload VChat.</p>
</div>
<div id="app" @mouseup="on_mouseup" style="display: none;" :class="{ inverted: inverted }">
<!-- Top menu -->
<div id="topmenu" class="ui top fixed menu" :class="{ inverted: inverted }">
<div v-for="(tab,index) in tabs" class="item" :class="{ active: tab.active }" @click="switchtab(tab)" @click.ctrl="editmode">
<i v-show="editing && !tab.immutable && index >= 2" class="icon-left-open-outline" @click.stop.prevent="movetab(tab,-1)" title="Move tab left"></i>
{{tab.name}}
<i v-show="editing && !tab.immutable" class="icon-cancel-circled-outline" @click.stop.prevent="deltab(tab)" title="Delete tab"></i>
<i v-show="editing && !tab.immutable && index != tabs.length-1" class="icon-right-open-outline" @click.stop.prevent="movetab(tab,1)" title="Move tab right"></i>
<div v-if="tab_unread_count(tab) > 0" class="ui top right attached red label">{{tab_unread_count(tab)}}</div>
</div>
<div class="right menu">
<div class="item" @click="newtab" title="New Tab"><i class="icon-folder-add"></i></div>
<div class="item" @click="pause" title="Pause Autoscroll">
<i class="icon-pause-outline" :class="{ blinkwarn: paused }"></i>
</div>
<div class="item" @click="editmode" title="Edit Mode">
<i class="icon-cog-outline" :class="{ blinkwarn: editing }"></i>
</div>
<div class="item" title="Click to test latency">
<span class="ui circular label" :class="ping_classes" @click="do_latency_test">
<template v-if="latency">
{{latency}}ms
</template>
</span>
</div>
</div>
</div>
<!-- Editor box -->
<div id="contentbox">
<div v-show="editing" id="editbox" class="ui segment" :class="{ inverted: inverted }">
<div class="ui internally celled grid" :class="{ inverted: inverted }">
<div class="row">
<div class="sixteen wide column">
<div class="ui center aligned header" :class="{ inverted: inverted }">
<h2>VChat Settings</h2>
</div>
<div style="text-align: center;"><a href="#" @click="editmode">Close Settings</a></div>
</div>
</div>
<div class="row">
<div class="eight wide column">
<h3>'{{active_tab.name}}' Tab Settings</h3>
<span v-show="active_tab.immutable">This tab is immutable. You cannot make changes.</span>
<div v-show="!active_tab.immutable">
<a href="#" @click="renametab">Rename Tab</a> - <a href="#" @click="deltab">Delete Tab</a>
<h5>Messages to display:</h5>
<div class="ui form">
<div class="grouped fields">
<div class="field" v-for="type in type_table" :title="type.tooltip">
<div v-show="!type.admin || is_admin" class="ui slider checkbox" :class="{ inverted: inverted, disabled: type.required || active_tab.immutable, checked: type.required || active_tab.immutable }">
<input type="checkbox" id="type.becomes" :value="type.becomes" v-model="active_tab.categories" :disabled="type.required || active_tab.immutable" :checked="type.required || active_tab.immutable"><label :for="type.becomes">{{type.pretty}}</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="eight wide column">
<h3>Global Settings</h3>
<div class="ui form" :class="{ inverted: inverted }">
<div class="grouped fields">
<div class="field">
<div class="ui slider checkbox" :class="{ inverted: inverted }">
<input type="checkbox" id="darkmode" v-model="inverted"><label for="darkmode">Dark Mode</label>
</div>
</div>
<div class="field">
<div class="ui slider checkbox" :class="{ inverted: inverted }">
<input type="checkbox" id="combining" v-model="animated"><label for="animated">Animate Messages</label>
</div>
</div>
</div>
<div class="inline fields">
<label>Combine Messages</label>
<div class="field" title="Combine no messages together.">
<div class="ui radio checkbox">
<input type="radio" id="cnone" name="crushing" v-model.number="crushing" value="0">
<label for="cnone">None</label>
</div>
</div>
<div class="field" title="Try to combine the newest and last message.">
<div class="ui radio checkbox">
<input type="radio" id="cone" name="crushing" v-model.number="crushing" value="1">
<label for="cone">One</label>
</div>
</div>
<div class="field" title="Try to combine the newest and last 3 messages.">
<div class="ui radio checkbox">
<input type="radio" id="cthree" name="crushing" v-model.number="crushing" value="3">
<label for="cthree">Three</label>
</div>
</div>
</div>
<div class="inline fields">
<div class="field" title="Font size (Min 0.2, Max 5, Default 0.9)">
<label>Font Scale</label>
<input class="inputbox" type="number" name="fontsize" placeholder="0.9" v-model.lazy.number="fontsize" required @keyup.enter="blur_this($event)">
</div>
</div>
<div class="inline fields">
<div class="field" title="Line height % (Min 100, Max 200, Default 130)">
<label>Line Height %</label>
<input class="inputbox" type="number" name="lineheight" placeholder="130" v-model.lazy.number="lineheight" required @keyup.enter="blur_this($event)">
</div>
</div>
<div class="inline fields">
<div class="field" title="Hides messages for performance (Min 50, Max 2000, Default 200)">
<label># Stored Messages</label>
<input class="inputbox" type="number" name="showingnum" placeholder="200" v-model.lazy.number="showingnum" required @keyup.enter="blur_this($event)">
</div>
</div>
</div>
<button class="ui button" @click="save_chatlog">Export Chatlog</button>
</div>
</div>
</div>
</div>
<!-- Messages box -->
<div v-show="!editing" id="messagebox" class="ui segment" @click="click_message" :class="{ inverted: inverted }" :style="{fontSize: fontsize+'em', lineHeight: lineheight+'%'}">
<transition-group name="msgsanim" tag="span" :css="animated">
<!-- We're filtering -->
<template v-if="current_categories.length">
<div v-show="unshown_messages > 0" key="hidewarn1"><span class='notice'>[ {{unshown_messages}} previous messages archived for performance. ]</span></div>
<div v-for="message in shown_messages" :key="message.id">
<span v-html="message.content"></span>
<span v-show="message.repeats > 1" class="ui grey circular label">x{{message.repeats}}</span>
</div>
</template>
<!-- We're not filtering, messages go directly to dom -->
<template v-else>
<div v-show="archived_messages.length > 0" key="hidewarn2"><span class='notice'>[ {{archived_messages.length}} previous messages archived for performance. ]</span></div>
<div v-for="message in messages" :key="message.id">
<span v-html="message.content"></span>
<span v-show="message.repeats > 1" class="ui grey circular label">x{{message.repeats}}</span>
</div>
</template>
</transition-group>
</div>
</div>
<!--
<div class="ui segment">
active_tab: {{active_tab}}<br>
current_categories: {{current_categories}}<br>
messages.length: {{messages.length}}<br>
archived_messages.length: {{archived_messages.length}}<br>
shown_messages.length: {{shown_messages.length}}<br>
</div>
-->
</div>
<script type="text/javascript">
//Document Ready
(function(){
start_vchat();
document.getElementById("loader").style.display = 'none';
document.getElementById("app").style.display = 'block';
})();
</script>
</body>
</html>
-78
View File
@@ -1,78 +0,0 @@
// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
value: function(predicate) {
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== 'function') {
throw TypeError('predicate must be a function');
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}
// 7. Return undefined.
return undefined;
},
configurable: true,
writable: true
});
}
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
//IE ugh
function storageAvailable(type) {
var storage;
try {
storage = window[type];
var x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch(e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
(storage && storage.length !== 0);
}
}
-1
View File
@@ -1 +0,0 @@
function storageAvailable(e){var t;try{t=window[e];var r="__storage_test__";return t.setItem(r,r),t.removeItem(r),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&t&&0!==t.length}}Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw TypeError('"this" is null or not defined');var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw TypeError("predicate must be a function");for(var n=arguments[1],o=0;o<r;){var a=t[o];if(e.call(n,a,o,t))return a;o++}},configurable:!0,writable:!0}),Date.now||(Date.now=function(){return(new Date).getTime()});
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-428
View File
@@ -1,428 +0,0 @@
//The 'V' is for 'VORE' but you can pretend it's for Vue.js if you really want.
//These are sent to the client via browse_rsc() in advance so the HTML can access them.
GLOBAL_LIST_INIT(vchatFiles, list(
"code/modules/vchat/css/vchat-font-embedded.css",
"code/modules/vchat/css/semantic.min.css",
"code/modules/vchat/css/ss13styles.css",
"code/modules/vchat/js/polyfills.min.js",
"code/modules/vchat/js/vue.min.js",
"code/modules/vchat/js/vchat.min.js"
))
// The to chat macro calls this proc, deprecated
/proc/__to_chat(var/target, var/message)
// First do logging in database
if(isclient(target))
var/client/C = target
vchat_add_message(C.ckey, message)
else if(ismob(target))
var/mob/M = target
if(M.ckey)
vchat_add_message(M.ckey, message)
else if(target == world)
for(var/client/C in GLOB.clients)
if(!QDESTROYING(C)) // Might be necessary?
vchat_add_message(C.ckey, message)
// Now lets either queue it for sending, or send it right now
if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.subsystem_initialized)
to_chat_immediate(target, world.time, message)
else
SSchat.queue(target, world.time, message)
//This is used to convert icons to base64 <image> strings, because byond stores icons in base64 in savefiles.
GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of icons for the browser output
//The main object attached to clients, created when they connect, and has start() called on it in client/New()
/datum/chatOutput
var/client/owner = null
var/loaded = FALSE
var/list/message_queue = list()
var/broken = FALSE
var/resources_sent = FALSE
var/message_buffer = 200 // Number of messages being actively shown to the user, used to play back that many messages on reconnect
var/last_topic_time = 0
var/too_many_topics = 0
var/topic_spam_limit = 10 //Just enough to get over the startup and such
/datum/chatOutput/New(client/C)
. = ..()
owner = C
/datum/chatOutput/Destroy()
owner = null
. = ..()
/datum/chatOutput/proc/update_vis()
if(!loaded && !broken)
winset(owner, null, "outputwindow.htmloutput.is-visible=false;outputwindow.oldoutput.is-visible=false;outputwindow.chatloadlabel.is-visible=true")
else if(broken)
winset(owner, null, "outputwindow.htmloutput.is-visible=false;outputwindow.oldoutput.is-visible=true;outputwindow.chatloadlabel.is-visible=false")
else if(loaded)
return //It can do it's own winsets from inside the JS if it's working.
//Shove all the assets at them
/datum/chatOutput/proc/send_resources()
for(var/filename in GLOB.vchatFiles)
owner << browse_rsc(file(filename))
resources_sent = TRUE
//Called from client/New() in a spawn()
/datum/chatOutput/proc/start()
if(!owner)
qdel(src)
return FALSE
if(!winexists(owner, "htmloutput"))
tgui_alert_async(owner, "Updated chat window does not exist. If you are using a custom skin file please allow the game to update.")
become_broken()
return FALSE
if(!owner?.is_preference_enabled(/datum/client_preference/vchat_enable))
become_broken()
return FALSE
//Could be loaded from a previous round, are you still there?
if(winget(owner,"outputwindow.htmloutput","is-visible") == "true") //Winget returns strings
send_event(event = list("evttype" = "availability"))
sleep(3 SECONDS)
if(!owner) // In case the client vanishes before winexists returns
qdel(src)
return FALSE
if(!loaded)
update_vis()
if(!resources_sent)
send_resources()
load()
return TRUE
//Attempts to actually load the HTML page into the client's UI
/datum/chatOutput/proc/load()
if(!owner)
qdel(src)
return
owner << browse(file2text("code/modules/vchat/html/vchat.html"), "window=htmloutput")
//Check back later
spawn(15 SECONDS)
if(!src)
return
if(!src.loaded)
src.become_broken()
//var/list/joins = list() //Just for testing with the below
//Called by Topic, when the JS in the HTML page finishes loading
/datum/chatOutput/proc/done_loading()
if(loaded)
return
loaded = TRUE
broken = FALSE
owner.chatOutputLoadedAt = world.time
//update_vis() //It does it's own winsets
ping_cycle()
send_playerinfo()
load_database()
add_verb(owner, /client/proc/vchat_export_log)
//Perform DB shenanigans
/datum/chatOutput/proc/load_database()
set waitfor = FALSE
// Only send them the number of buffered messages, instead of the ENTIRE log
var/list/results = vchat_get_messages(owner.ckey, message_buffer) //If there's bad performance on reconnects, look no further
if(islist(results))
for(var/i in results.len to 1 step -1)
var/list/message = results[i]
var/count = 10
to_chat_immediate(owner, message["time"], message["message"])
count++
if(count >= 10)
count = 0
CHECK_TICK
//It din work
/datum/chatOutput/proc/become_broken()
broken = TRUE
loaded = FALSE
if(!owner)
qdel(src)
return
update_vis()
spawn()
if(owner.is_preference_enabled(/datum/client_preference/vchat_enable))
tgui_alert_async(owner,"VChat didn't load after some time. Switching to use oldchat as a fallback. Try using 'Reload VChat' verb in OOC verbs, or reconnecting to try again.")
//Provide the JS with who we are
/datum/chatOutput/proc/send_playerinfo()
if(!owner)
qdel(src)
return
var/list/playerinfo = list("evttype" = "byond_player", "cid" = owner.computer_id, "ckey" = owner.ckey, "address" = owner.address, "admin" = owner.holder ? "true" : "false")
send_event(playerinfo)
//Ugh byond doesn't handle UTF-8 well so we have to do this.
/proc/jsEncode(var/list/message) {
if(!islist(message))
CRASH("Passed a non-list to encode.")
return url_encode(url_encode(json_encode(message)))
}
//Send a side-channel event to the chat window
/datum/chatOutput/proc/send_event(var/event, var/client/C = owner)
C << output(jsEncode(event), "htmloutput:get_event")
//Looping sleeping proc that just pings the client and dies when we die
/datum/chatOutput/proc/ping_cycle()
set waitfor = FALSE
while(!QDELING(src))
if(!owner)
qdel(src)
return
send_event(event = keep_alive())
sleep(20 SECONDS) //Make sure this makes sense with what the js client is expecting
//Just produces a message for using in keepalives from the server to the client
/datum/chatOutput/proc/keep_alive()
return list("evttype" = "keepalive")
//A response to a latency check from the client
/datum/chatOutput/proc/latency_check()
return list("evttype" = "pong")
//Redirected from client/Topic when the user clicks a link that pertains directly to the chat (when src == "chat")
/datum/chatOutput/Topic(var/href, var/list/href_list)
if(usr.client != owner)
return 1
if(last_topic_time > (world.time - 3 SECONDS))
too_many_topics++
if(too_many_topics >= topic_spam_limit)
log_and_message_admins("Kicking [key_name(owner)] - VChat Topic() spam")
to_chat(owner,span_danger("You have been kicked due to VChat sending too many messages to the server. Try reconnecting."))
qdel(owner)
qdel(src)
return
else
too_many_topics = 0
last_topic_time = world.time
var/list/params = list()
for(var/key in href_list)
if(length(key) > 7 && findtext(key, "param"))
var/param_name = copytext(key, 7, -1)
var/item = href_list[key]
params[param_name] = item
var/data
switch(href_list["proc"])
if("not_ready")
CRASH("Tried to send a message to [owner.ckey] chatOutput before it was ready!")
if("done_loading")
data = done_loading(arglist(params))
if("ping")
data = latency_check(arglist(params))
if("ident")
data = bancheck(arglist(params))
if("unloading")
loaded = FALSE
if("debug")
data = debugmsg(arglist(params))
if(href_list["showingnum"])
message_buffer = CLAMP(text2num(href_list["showingnum"]), 50, 2000)
if(data)
send_event(event = data)
//Print a message that was an error from a client
/datum/chatOutput/proc/debugmsg(var/message = "No String Provided")
log_debug("VChat: [owner] got: [message]")
//Check relevant client info reported from JS
/datum/chatOutput/proc/bancheck(var/clientdata)
var/list/info = json_decode(clientdata)
var/ckey = info["ckey"]
var/ip = info["ip"]
var/cid = info["cid"]
//Never connected? How sad!
if(!cid && !ip && !ckey)
return
if(cid && !isnum(cid) && !(cid == ""))
log_and_message_admins("- bancheck with invalid cid! ([cid])", owner)
if(ip && !findtext(ip, new/regex(@"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")) && !(ip == ""))
log_and_message_admins("- bancheck with invalid ip! ([ip])", owner)
var/list/ban = world.IsBanned(key = ckey, address = ip, computer_id = cid)
if(ban)
log_and_message_admins("has a cookie from a banned account! (Cookie: [ckey], [ip], [cid])", owner)
//Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
// exporting it as text, and then parsing the base64 from that.
// (This relies on byond automatically storing icons in savefiles as base64)
/proc/icon2base64(var/icon/icon, var/iconKey = "misc")
if (!isicon(icon)) return FALSE
GLOB.iconCache[iconKey] << icon
var/iconData = GLOB.iconCache.ExportText(iconKey)
var/list/partial = splittext(iconData, "{")
return replacetext(copytext(partial[2], 3, -5), "\n", "")
/proc/expire_bicon_cache(key)
if(GLOB.bicon_cache[key])
GLOB.bicon_cache -= key
return TRUE
return FALSE
GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the <img> tag results, not the icons
/proc/icon2html(var/obj, var/use_class = 1, var/custom_classes = "")
var/class = use_class ? "class='icon misc [custom_classes]'" : null
if(!obj)
return
// Try to avoid passing bicon an /icon directly. It is better to pass it an atom so it can cache.
if(isicon(obj)) // Passed an icon directly, nothing to cache-key on, as icon refs get reused *often*
return "<img [class] src='data:image/png;base64,[icon2base64(obj)]'>"
// Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with.
var/atom/A = obj
var/key
var/changes_often = ishuman(A) || isobserver(A) // If this ends up with more, move it into a proc or var on atom.
if(changes_often)
key = "\ref[A]"
else
key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]"
var/base64 = GLOB.bicon_cache[key]
// Non-human atom, no cache
if(!base64) // Doesn't exist, make it.
base64 = icon2base64(A.examine_icon(), key)
GLOB.bicon_cache[key] = base64
if(changes_often)
addtimer(CALLBACK(GLOBAL_PROC, PROC_REF(expire_bicon_cache), key), 50 SECONDS, TIMER_UNIQUE)
// May add a class to the img tag created by bicon
if(use_class)
class = "class='icon [A.icon_state] [custom_classes]'"
return "<IMG [class] src='data:image/png;base64,[base64]'>"
//Checks if the message content is a valid to_chat message
/proc/is_valid_tochat_message(message)
return istext(message)
//Checks if the target of to_chat is something we can send to
/proc/is_valid_tochat_target(target)
return !istype(target, /savefile) && (ismob(target) || islist(target) || isclient(target) || target == world)
var/to_chat_filename
var/to_chat_line
var/to_chat_src
//This proc is only really used if the SSchat subsystem is unavailable (not started yet)
/proc/to_chat_immediate(target, time, message)
if(!is_valid_tochat_message(message) || !is_valid_tochat_target(target))
target << message
// Info about the "message"
if(isnull(message))
message = "(null)"
else if(istype(message, /datum))
var/datum/D = message
message = "([D.type]): '[D]'"
else if(!is_valid_tochat_message(message))
message = "(bad message) : '[message]'"
// Info about the target
var/targetstring = "'[target]'"
if(istype(target, /datum))
var/datum/D = target
targetstring += ", [D.type]"
// The final output
log_debug("to_chat called with invalid message/target: [to_chat_filename], [to_chat_line], [to_chat_src], Message: '[message]', Target: [targetstring]")
return
else if(is_valid_tochat_message(message))
if(istext(target))
log_debug("Somehow, to_chat got a text as a target")
return
var/original_message = message
message = replacetext(message, "\n", "<br>")
message = replacetext(message, "\improper", "")
message = replacetext(message, "\proper", "")
if(isnull(time))
time = world.time
var/client/C = CLIENT_FROM_VAR(target)
if(!C)
return // No client? No care.
else if(C.chatOutput.broken)
DIRECT_OUTPUT(C, original_message)
return
else if(!C.chatOutput.loaded)
return // If not loaded yet, do nothing and history-sending on load will get it.
var/list/tojson = list("time" = time, "message" = message);
target << output(jsEncode(tojson), "htmloutput:putmessage")
/client/proc/vchat_export_log()
set name = "Export chatlog"
set category = "OOC.Chat"
if(chatOutput.broken)
to_chat(src, span_warning("Error: VChat isn't processing your messages!"))
return
var/list/results = vchat_get_messages(ckey)
if(!LAZYLEN(results))
to_chat(src, span_warning("Error: No messages found! Please inform a dev if you do have messages!"))
return
var/o_file = "data/chatlog_tmp/[ckey]_chat_log"
if(fexists(o_file) && !fdel(o_file))
to_chat(src, span_warning("Error: Your chat log is already being prepared. Please wait until it's been downloaded before trying to export it again."))
return
// Write the CSS file to the log
var/text_blob = "<html><head><style>"
text_blob += file2text(file("code/modules/vchat/css/ss13styles.css"))
text_blob += "</style></head><body>"
// Write the messages to the log
for(var/list/result in results)
text_blob += "[result["message"]]<br>"
CHECK_TICK
text_blob += "</body></html>"
rustg_file_write(text_blob, o_file)
// Send the log to the client
src << ftp(file(o_file), "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html")
// clean up the file on our end
spawn(10 SECONDS)
if(!fdel(o_file))
spawn(1 MINUTE)
if(!fdel(o_file))
log_debug("Warning: [ckey]'s chatlog could not be deleted one minute after file transfer was initiated. It is located at 'data/chatlog_tmp/[ckey]_chat_log' and will need to be manually removed.")
-124
View File
@@ -1,124 +0,0 @@
#define VCHAT_FILENAME "data/vchat.db"
GLOBAL_DATUM(vchatdb, /database)
//Boot up db file
/proc/init_vchat()
//Cleanup previous if exists
fdel(VCHAT_FILENAME)
fdel(VCHAT_FILENAME+"-shm") //Shared memory, and
fdel(VCHAT_FILENAME+"-wal") // write ahead. Only present on unclean stop.
//Create a new one
GLOB.vchatdb = new(VCHAT_FILENAME)
//Build our basic boring tables
vchat_create_tables()
//Check to see if it's init
/proc/check_vchat()
if(istype(GLOB.vchatdb))
return TRUE
else
return FALSE
//For INSERT/CREATE/DELETE, etc that return a RowsAffected.
/proc/vchat_exec_update(var/query)
if(!check_vchat())
log_world("There's no vchat database open but you tried to query it with: [query]")
return FALSE
//Solidify our query
var/database/query/q = vchat_build_query(query)
//Run it
q.Execute(GLOB.vchatdb)
//Handle errors
if(q.Error())
log_world("Query \"[islist(query)?query[1]:query]\" ended in error [q.ErrorMsg()]")
return FALSE
return q.RowsAffected()
//For SELECT, that return results.
/proc/vchat_exec_query(var/query)
if(!check_vchat())
log_world("There's no vchat database open but you tried to query it!")
return FALSE
//Solidify our query
var/database/query/q = vchat_build_query(query)
//Run it
q.Execute(GLOB.vchatdb)
//Handle errors
if(q.Error())
log_world("Query \"[islist(query)?query[1]:query]\" ended in error [q.ErrorMsg()]")
return FALSE
//Return any results
var/list/results = list()
//Return results if any.
while(q.NextRow())
results[++results.len] = q.GetRowData()
return results
//Create a query from string or list with params
/proc/vchat_build_query(var/query)
var/database/query/q
if(islist(query))
q = new(arglist(query))
else
q = new(query)
if(!istype(q))
return
return q
/proc/vchat_create_tables()
//Byond is so great half the time it doesn't delete the file
var/cleanup = "DROP TABLE IF EXISTS messages"
vchat_exec_update(cleanup)
//Messages table
var/tabledef = "CREATE TABLE messages(\
id INTEGER PRIMARY KEY AUTOINCREMENT,\
ckey VARCHAR(50) NOT NULL,\
worldtime INTEGER NOT NULL,\
message TEXT NOT NULL)"
vchat_exec_update(tabledef)
//Index on ckey
var/indexdef = "CREATE INDEX ckey_index ON messages (ckey)"
vchat_exec_update(indexdef)
//INSERT a new message
/proc/vchat_add_message(var/ckey, var/message)
if(!ckey || !message)
return
var/list/messagedef = list(
"INSERT INTO messages (ckey,worldtime,message) VALUES (?, ?, ?)",
ckey,
world.time || 0,
message)
return vchat_exec_update(messagedef)
//Get a player's message history. If limit is supplied, messages will be in reverse order.
/proc/vchat_get_messages(var/ckey, var/limit)
if(!ckey)
return
var/list/getdef
if (limit)
getdef = list("SELECT * FROM messages WHERE ckey = ? ORDER BY id DESC LIMIT [text2num(limit)]", ckey)
else
getdef = list("SELECT * FROM messages WHERE ckey = ?", ckey)
return vchat_exec_query(getdef)
#undef VCHAT_FILENAME
+1 -1
View File
@@ -53,7 +53,7 @@
"sass-loader": "^16.0.3",
"style-loader": "^4.0.0",
"swc-loader": "^0.2.6",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"typescript": "5.6.3",
"url-loader": "^4.1.1",
"webpack": "^5.96.1",
+1 -1
View File
@@ -13,6 +13,6 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2"
"tgui-core": "^1.8.4"
}
}
+1 -1
View File
@@ -10,7 +10,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
+1 -1
View File
@@ -9,7 +9,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tgui": "workspace:*",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-polyfill": "workspace:*"
}
}
+1 -1
View File
@@ -18,7 +18,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-popper": "^2.3.0",
"tgui-core": "^1.8.2",
"tgui-core": "^1.8.4",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
+185 -183
View File
@@ -183,9 +183,9 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-define-polyfill-provider@npm:^0.6.3":
version: 0.6.3
resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3"
"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4":
version: 0.6.4
resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4"
dependencies:
"@babel/helper-compilation-targets": "npm:^7.22.6"
"@babel/helper-plugin-utils": "npm:^7.22.5"
@@ -194,7 +194,7 @@ __metadata:
resolve: "npm:^1.14.2"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/4320e3527645e98b6a0d5626fef815680e3b2b03ec36045de5e909b0f01546ab3674e96f50bf3bc8413f8c9037e5ee1a5f560ebdf8210426dad1c2c03c96184a
checksum: 10c0/b74f2b46e233a178618d19432bdae16e0137d0a603497ee901155e083c4a61f26fe01d79fb95d5f4c22131ade9d958d8f587088d412cca1302633587f070919d
languageName: node
linkType: hard
@@ -1866,13 +1866,13 @@ __metadata:
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.5.0
resolution: "@eslint-community/eslint-utils@npm:4.5.0"
version: 4.5.1
resolution: "@eslint-community/eslint-utils@npm:4.5.1"
dependencies:
eslint-visitor-keys: "npm:^3.4.3"
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
checksum: 10c0/0fad96181bd73ef7254ba61dbbca460a41fe155880122db8852e75c1063617dc60005ff31a7354ecf9dbfcb46fce4349ceca5c1d24db036c5aa39a4bf622fafc
checksum: 10c0/b520ae1b7bd04531a5c5da2021071815df4717a9f7d13720e3a5ddccf5c9c619532039830811fcbae1c2f1c9d133e63af2435ee69e0fc0fabbd6d928c6800fb2
languageName: node
linkType: hard
@@ -1943,9 +1943,9 @@ __metadata:
linkType: hard
"@fastify/error@npm:^4.0.0":
version: 4.0.0
resolution: "@fastify/error@npm:4.0.0"
checksum: 10c0/074b8a6c350c29a8fc8314298d9457fe0c1ba6e7f160e9ae6ba0e18853f1ec7427d768f966700cbf67a4694f3a9a593c6a23e42ce3ed62e40fecdf8026040d9a
version: 4.1.0
resolution: "@fastify/error@npm:4.1.0"
checksum: 10c0/11215eb80ec0bd0a6333d8e939461123269cdbb2eb9ec853faee50f2b8284cbd7a826e654665ff37c120bdfc4a6e0f2f17f33f84f2255291a234b012dd129d53
languageName: node
linkType: hard
@@ -3160,90 +3160,90 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-darwin-arm64@npm:1.11.8"
"@swc/core-darwin-arm64@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-darwin-arm64@npm:1.11.11"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-darwin-x64@npm:1.11.8"
"@swc/core-darwin-x64@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-darwin-x64@npm:1.11.11"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.8"
"@swc/core-linux-arm-gnueabihf@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.11"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.8"
"@swc/core-linux-arm64-gnu@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.11"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-linux-arm64-musl@npm:1.11.8"
"@swc/core-linux-arm64-musl@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-arm64-musl@npm:1.11.11"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-linux-x64-gnu@npm:1.11.8"
"@swc/core-linux-x64-gnu@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-x64-gnu@npm:1.11.11"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-linux-x64-musl@npm:1.11.8"
"@swc/core-linux-x64-musl@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-linux-x64-musl@npm:1.11.11"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.8"
"@swc/core-win32-arm64-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.11"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.8"
"@swc/core-win32-ia32-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.11"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.11.8":
version: 1.11.8
resolution: "@swc/core-win32-x64-msvc@npm:1.11.8"
"@swc/core-win32-x64-msvc@npm:1.11.11":
version: 1.11.11
resolution: "@swc/core-win32-x64-msvc@npm:1.11.11"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.9.1":
version: 1.11.8
resolution: "@swc/core@npm:1.11.8"
version: 1.11.11
resolution: "@swc/core@npm:1.11.11"
dependencies:
"@swc/core-darwin-arm64": "npm:1.11.8"
"@swc/core-darwin-x64": "npm:1.11.8"
"@swc/core-linux-arm-gnueabihf": "npm:1.11.8"
"@swc/core-linux-arm64-gnu": "npm:1.11.8"
"@swc/core-linux-arm64-musl": "npm:1.11.8"
"@swc/core-linux-x64-gnu": "npm:1.11.8"
"@swc/core-linux-x64-musl": "npm:1.11.8"
"@swc/core-win32-arm64-msvc": "npm:1.11.8"
"@swc/core-win32-ia32-msvc": "npm:1.11.8"
"@swc/core-win32-x64-msvc": "npm:1.11.8"
"@swc/core-darwin-arm64": "npm:1.11.11"
"@swc/core-darwin-x64": "npm:1.11.11"
"@swc/core-linux-arm-gnueabihf": "npm:1.11.11"
"@swc/core-linux-arm64-gnu": "npm:1.11.11"
"@swc/core-linux-arm64-musl": "npm:1.11.11"
"@swc/core-linux-x64-gnu": "npm:1.11.11"
"@swc/core-linux-x64-musl": "npm:1.11.11"
"@swc/core-win32-arm64-msvc": "npm:1.11.11"
"@swc/core-win32-ia32-msvc": "npm:1.11.11"
"@swc/core-win32-x64-msvc": "npm:1.11.11"
"@swc/counter": "npm:^0.1.3"
"@swc/types": "npm:^0.1.19"
peerDependencies:
@@ -3272,7 +3272,7 @@ __metadata:
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: 10c0/2bd5787f81333b11212022fb90318cdc3911e8408b34f3324cd76ce43c48ffd2b9f91295ecbeda11b43dcd86a59404fab70d00e67c5dd26f71c6311ea1a3c1b1
checksum: 10c0/ae7038336e1e4dd1c4357c82fd1c8b76c80f0650d103714fc21dcf9b707f60be9bb8edb8de3a9ea26e6956a215c83759f6a77d8c9175ac760e6f9c192d666025
languageName: node
linkType: hard
@@ -3569,11 +3569,11 @@ __metadata:
linkType: hard
"@types/node@npm:*, @types/node@npm:^22.9.0":
version: 22.13.10
resolution: "@types/node@npm:22.13.10"
version: 22.13.11
resolution: "@types/node@npm:22.13.11"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/a3865f9503d6f718002374f7b87efaadfae62faa499c1a33b12c527cfb9fd86f733e1a1b026b80c5a0e4a965701174bc3305595a7d36078aa1abcf09daa5dee9
checksum: 10c0/f6ee33d36372242535c38640fe7550a6640d8a775ec19b55bfc11775b521cba072d892ca92a912332ce01b317293d645c1bf767f3f882ec719f2404a3d2a5b96
languageName: node
linkType: hard
@@ -3622,12 +3622,12 @@ __metadata:
linkType: hard
"@types/react@npm:^18.3.12":
version: 18.3.18
resolution: "@types/react@npm:18.3.18"
version: 18.3.19
resolution: "@types/react@npm:18.3.19"
dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2"
checksum: 10c0/8fb2b00672072135d0858dc9db07873ea107cc238b6228aaa2a9afd1ef7a64a7074078250db38afbeb19064be8ea6af5eac32d404efdd5f45e093cc4829d87f8
checksum: 10c0/236bfe0c4748ada1a640f13573eca3e0fc7c9d847b442947adb352b0718d6d285357fd84c33336c8ffb8cbfabc0d58a43a647c7fd79857fecd61fb58ab6f7918
languageName: node
linkType: hard
@@ -3830,18 +3830,18 @@ __metadata:
linkType: hard
"@typescript-eslint/parser@npm:^8.13.0":
version: 8.26.1
resolution: "@typescript-eslint/parser@npm:8.26.1"
version: 8.27.0
resolution: "@typescript-eslint/parser@npm:8.27.0"
dependencies:
"@typescript-eslint/scope-manager": "npm:8.26.1"
"@typescript-eslint/types": "npm:8.26.1"
"@typescript-eslint/typescript-estree": "npm:8.26.1"
"@typescript-eslint/visitor-keys": "npm:8.26.1"
"@typescript-eslint/scope-manager": "npm:8.27.0"
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/typescript-estree": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/21fe4306b6017bf183d92cdd493edacd302816071e29e1400452f3ccd224ab8111b75892507b9731545e98e6e4d153e54dab568b3433f6c9596b6cb2f7af922f
checksum: 10c0/2ada98167ca5a474544fada7658d7c8d54ea4dfdd692e3d30d18b5531e50d7308a5b09d23dca651f9fe841f96075ccd18643431f4b61d0e4e7e7ccde888258e8
languageName: node
linkType: hard
@@ -3855,13 +3855,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:8.26.1":
version: 8.26.1
resolution: "@typescript-eslint/scope-manager@npm:8.26.1"
"@typescript-eslint/scope-manager@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/scope-manager@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.26.1"
"@typescript-eslint/visitor-keys": "npm:8.26.1"
checksum: 10c0/ecd30eb615c7384f01cea8f2c8e8dda7507ada52ad0d002d3701bdd9d06f6d14cefb31c6c26ef55708adfaa2045a01151e8685656240268231a4bac8f792afe4
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
checksum: 10c0/d87daeffb81f4e70f168c38f01c667713bda71c4545e28fcdf0792378fb3df171894ef77854c5c1a5e5a22c784ee1ccea2dd856b5baf825840710a6a74c14ac9
languageName: node
linkType: hard
@@ -3879,10 +3879,10 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:8.26.1":
version: 8.26.1
resolution: "@typescript-eslint/types@npm:8.26.1"
checksum: 10c0/805b239b57854fc12eae9e2bec6ccab24bac1d30a762c455f22c73b777a5859c64c58b4750458bd0ab4aadd664eb95cbef091348a071975acac05b15ebea9f1b
"@typescript-eslint/types@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/types@npm:8.27.0"
checksum: 10c0/9c5f2ba816a9baea5982feeadebe4d19f4df77ddb025a7b2307f9e1e6914076b63cbad81f7f915814e64b4d915052cf27bd79ce3e5a831340cb5ab244133941b
languageName: node
linkType: hard
@@ -3923,12 +3923,12 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:8.26.1":
version: 8.26.1
resolution: "@typescript-eslint/typescript-estree@npm:8.26.1"
"@typescript-eslint/typescript-estree@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/typescript-estree@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.26.1"
"@typescript-eslint/visitor-keys": "npm:8.26.1"
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/visitor-keys": "npm:8.27.0"
debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2"
is-glob: "npm:^4.0.3"
@@ -3937,22 +3937,22 @@ __metadata:
ts-api-utils: "npm:^2.0.1"
peerDependencies:
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/adc95e4735a8ded05ad35d7b4fae68c675afdd4b3531bc4a51eab5efe793cf80bc75f56dfc8022af4c0a5b316eec61f8ce6b77c2ead45fc675fea7e28cd52ade
checksum: 10c0/c04d602825ff2a7b2a89746a68b32f7052fb4ce3d2355d1f4e6f43fd064f17c3b44fb974c98838a078fdebdc35152d2ab0af34663dfca99db7a790bd3fc5d8ac
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:^8.13.0":
version: 8.26.1
resolution: "@typescript-eslint/utils@npm:8.26.1"
version: 8.27.0
resolution: "@typescript-eslint/utils@npm:8.27.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:8.26.1"
"@typescript-eslint/types": "npm:8.26.1"
"@typescript-eslint/typescript-estree": "npm:8.26.1"
"@typescript-eslint/scope-manager": "npm:8.27.0"
"@typescript-eslint/types": "npm:8.27.0"
"@typescript-eslint/typescript-estree": "npm:8.27.0"
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: ">=4.8.4 <5.9.0"
checksum: 10c0/a5cb3bdf253cc8e8474a2ed8666c0a6194abe56f44039c6623bef0459ed17d0276ed6e40c70d35bd8ec4d41bafc255e4d3025469f32ac692ba2d89e7579c2a26
checksum: 10c0/dcfd5f2c17f1a33061e3ec70d0946ff23a4238aabacae3d85087165beccedf84fb8506d30848f2470e3b60ab98b230aef79c6e8b4c5d39648a37ac559ac5b1e0
languageName: node
linkType: hard
@@ -3975,13 +3975,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:8.26.1":
version: 8.26.1
resolution: "@typescript-eslint/visitor-keys@npm:8.26.1"
"@typescript-eslint/visitor-keys@npm:8.27.0":
version: 8.27.0
resolution: "@typescript-eslint/visitor-keys@npm:8.27.0"
dependencies:
"@typescript-eslint/types": "npm:8.26.1"
"@typescript-eslint/types": "npm:8.27.0"
eslint-visitor-keys: "npm:^4.2.0"
checksum: 10c0/51b1016d06cd2b9eac0a213de418b0a26022fd3b71478014541bfcbc2a3c4d666552390eb9c209fa9e52c868710d9f1b21a2c789d35c650239438c366a27a239
checksum: 10c0/d86fd4032db07123816aab3a6b8b53f840387385ab2a4d8f96b22fc76b5438fb27ac8dc42b63caf23f3d265c33e9075dbf1ce8d31f939df12f5cd077d3b10295
languageName: node
linkType: hard
@@ -4915,16 +4915,17 @@ __metadata:
linkType: hard
"array.prototype.findlastindex@npm:^1.2.5":
version: 1.2.5
resolution: "array.prototype.findlastindex@npm:1.2.5"
version: 1.2.6
resolution: "array.prototype.findlastindex@npm:1.2.6"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-abstract: "npm:^1.23.9"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
es-shim-unscopables: "npm:^1.0.2"
checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3
es-object-atoms: "npm:^1.1.1"
es-shim-unscopables: "npm:^1.1.0"
checksum: 10c0/82559310d2e57ec5f8fc53d7df420e3abf0ba497935de0a5570586035478ba7d07618cb18e2d4ada2da514c8fb98a034aaf5c06caa0a57e2f7f4c4adedef5956
languageName: node
linkType: hard
@@ -4953,17 +4954,18 @@ __metadata:
linkType: hard
"array.prototype.reduce@npm:^1.0.6":
version: 1.0.7
resolution: "array.prototype.reduce@npm:1.0.7"
version: 1.0.8
resolution: "array.prototype.reduce@npm:1.0.8"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-abstract: "npm:^1.23.9"
es-array-method-boxes-properly: "npm:^1.0.0"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
is-string: "npm:^1.0.7"
checksum: 10c0/97aac907d7b15088d5b991bad79de96f95ea0d47a701a034e2dc816e0aabaed2fb401d7fe65ab6fda05eafa58319aa2d1bac404f515e162b81b3b61a51224db2
es-object-atoms: "npm:^1.1.1"
is-string: "npm:^1.1.1"
checksum: 10c0/0a4635f468e9161f51c4a87f80057b8b3c27b0ccc3e40ad7ea77cd1e147f1119f46977b0452f3fa325f543126200f2caf8c1390bd5303edf90d9c1dcd7d5a8a0
languageName: node
linkType: hard
@@ -5153,13 +5155,13 @@ __metadata:
linkType: hard
"axios@npm:^1.7.7":
version: 1.8.2
resolution: "axios@npm:1.8.2"
version: 1.8.4
resolution: "axios@npm:1.8.4"
dependencies:
follow-redirects: "npm:^1.15.6"
form-data: "npm:^4.0.0"
proxy-from-env: "npm:^1.1.0"
checksum: 10c0/d8c2969e4642dc6d39555ac58effe06c051ba7aac2bd40cad7a9011c019fb2f16ee011c5a6906cb25b8a4f87258c359314eb981f852e60ad445ecaeb793c7aa2
checksum: 10c0/450993c2ba975ffccaf0d480b68839a3b2435a5469a71fa2fb0b8a55cdb2c2ae47e609360b9c1e2b2534b73dfd69e2733a1cf9f8215bee0bcd729b72f801b0ce
languageName: node
linkType: hard
@@ -5304,15 +5306,15 @@ __metadata:
linkType: hard
"babel-plugin-polyfill-corejs2@npm:^0.4.10":
version: 0.4.12
resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12"
version: 0.4.13
resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13"
dependencies:
"@babel/compat-data": "npm:^7.22.6"
"@babel/helper-define-polyfill-provider": "npm:^0.6.3"
"@babel/helper-define-polyfill-provider": "npm:^0.6.4"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/49150c310de2d472ecb95bd892bca1aa833cf5e84bbb76e3e95cf9ff2c6c8c3b3783dd19d70ba50ff6235eb8ce1fa1c0affe491273c95a1ef6a2923f4d5a3819
checksum: 10c0/b4a54561606d388e6f9499f39f03171af4be7f9ce2355e737135e40afa7086cf6790fdd706c2e59f488c8fa1f76123d28783708e07ddc84647dca8ed8fb98e06
languageName: node
linkType: hard
@@ -5329,13 +5331,13 @@ __metadata:
linkType: hard
"babel-plugin-polyfill-regenerator@npm:^0.6.1":
version: 0.6.3
resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3"
version: 0.6.4
resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4"
dependencies:
"@babel/helper-define-polyfill-provider": "npm:^0.6.3"
"@babel/helper-define-polyfill-provider": "npm:^0.6.4"
peerDependencies:
"@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
checksum: 10c0/40164432e058e4b5c6d56feecacdad22692ae0534bd80c92d5399ed9e1a6a2b6797c8fda837995daddd4ca391f9aa2d58c74ad465164922e0f73631eaf9c4f76
checksum: 10c0/ebaaf9e4e53201c02f496d3f686d815e94177b3e55b35f11223b99c60d197a29f907a2e87bbcccced8b7aff22a807fccc1adaf04722864a8e1862c8845ab830a
languageName: node
linkType: hard
@@ -6051,9 +6053,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001688":
version: 1.0.30001703
resolution: "caniuse-lite@npm:1.0.30001703"
checksum: 10c0/ed88e318da28e9e59c4ac3a2e3c42859558b7b713aebf03696a1f916e4ed4b70734dda82be04635e2b62ec355b8639bbed829b7b12ff528d7f9cc31a3a5bea91
version: 1.0.30001706
resolution: "caniuse-lite@npm:1.0.30001706"
checksum: 10c0/b502d0a509611fd5b009e1123d482e983696984b6b749c3f485fd8d02cc58376c59cf0bb15f22fa2d337da104970edd27dd525d4663cebc728e26ac4adedff0d
languageName: node
linkType: hard
@@ -7872,9 +7874,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.73":
version: 1.5.114
resolution: "electron-to-chromium@npm:1.5.114"
checksum: 10c0/cb86057d78f1aeb53ab6550dedacfd9496bcc6676bab7b48466c3958ba9ce0ed78c7213b1eab99ba38542cbaaa176eb7f8ea8b0274c0688b8ce3058291549430
version: 1.5.123
resolution: "electron-to-chromium@npm:1.5.123"
checksum: 10c0/ffaa65e9337f5ba0b51d5709795c3d1074e0cae8efda24116561feed6cedd281f523be50339d991c2fc65344e66e65e7308a157ff87047a8bb4e8008412e9eb1
languageName: node
linkType: hard
@@ -8196,7 +8198,7 @@ __metadata:
languageName: node
linkType: hard
"es-shim-unscopables@npm:^1.0.2":
"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0":
version: 1.1.0
resolution: "es-shim-unscopables@npm:1.1.0"
dependencies:
@@ -9497,13 +9499,13 @@ __metadata:
linkType: hard
"find-my-way@npm:^9.0.0":
version: 9.2.0
resolution: "find-my-way@npm:9.2.0"
version: 9.3.0
resolution: "find-my-way@npm:9.3.0"
dependencies:
fast-deep-equal: "npm:^3.1.3"
fast-querystring: "npm:^1.0.0"
safe-regex2: "npm:^4.0.0"
checksum: 10c0/de869f044ea196493d3d8951e592e8155191cfa7ff56b49ae0aa3b7184e25a19e6931386a0b1ac0ba875648f54430b30c33610045bee0e2d0e5875b9b4fd13fb
safe-regex2: "npm:^5.0.0"
checksum: 10c0/f221bc0c70b2c2a6f9282fd3e0ac1911fcbb68ac718da043ddcefdec3b9d884a54d6ef1bf92e1b2ff83400e50f3c22141206a8ea3308bf0e9e37fd177843425d
languageName: node
linkType: hard
@@ -13619,9 +13621,9 @@ __metadata:
linkType: hard
"mime-db@npm:>= 1.43.0 < 2":
version: 1.53.0
resolution: "mime-db@npm:1.53.0"
checksum: 10c0/1dcc37ba8ed5d1c179f5c6f0837e8db19371d5f2ea3690c3c2f3fa8c3858f976851d3460b172b4dee78ebd606762cbb407aa398545fbacd539e519f858cd7bf4
version: 1.54.0
resolution: "mime-db@npm:1.54.0"
checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284
languageName: node
linkType: hard
@@ -13913,7 +13915,7 @@ __metadata:
languageName: node
linkType: hard
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.1":
"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:~0.5.1":
version: 0.5.6
resolution: "mkdirp@npm:0.5.6"
dependencies:
@@ -14006,11 +14008,11 @@ __metadata:
linkType: hard
"nanoid@npm:^3.3.8":
version: 3.3.9
resolution: "nanoid@npm:3.3.9"
version: 3.3.11
resolution: "nanoid@npm:3.3.11"
bin:
nanoid: bin/nanoid.cjs
checksum: 10c0/4515abe53db7b150cf77074558efc20d8e916d6910d557b5ce72e8bbf6f8e7554d3d7a0d180bfa65e5d8e99aa51b207aa8a3bf5f3b56233897b146d592e30b24
checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b
languageName: node
linkType: hard
@@ -14365,9 +14367,9 @@ __metadata:
linkType: hard
"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.12, nwsapi@npm:^2.2.2":
version: 2.2.18
resolution: "nwsapi@npm:2.2.18"
checksum: 10c0/fb64761f02d838a1964ef3f15f324779ae5b735c878843ed6592b07d85652928f8f34458605fee0ff379514bf5ffa5afeef5dc8290bfb0959a854069e2af300b
version: 2.2.19
resolution: "nwsapi@npm:2.2.19"
checksum: 10c0/5bd9da260b2b24a775103c835a93c79584a870307eb59270b43c6970b7ae9c0af3cfffd9df5292c24d2ca2c67f49672b4c9be9824c347d6083b90e002a12779a
languageName: node
linkType: hard
@@ -14437,13 +14439,14 @@ __metadata:
linkType: hard
"object.entries@npm:^1.1.0, object.entries@npm:^1.1.8":
version: 1.1.8
resolution: "object.entries@npm:1.1.8"
version: 1.1.9
resolution: "object.entries@npm:1.1.9"
dependencies:
call-bind: "npm:^1.0.7"
call-bind: "npm:^1.0.8"
call-bound: "npm:^1.0.4"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3
es-object-atoms: "npm:^1.1.1"
checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db
languageName: node
linkType: hard
@@ -15124,13 +15127,12 @@ __metadata:
linkType: hard
"portfinder@npm:^1.0.26":
version: 1.0.34
resolution: "portfinder@npm:1.0.34"
version: 1.0.35
resolution: "portfinder@npm:1.0.35"
dependencies:
async: "npm:^3.2.6"
debug: "npm:^4.3.6"
mkdirp: "npm:^0.5.6"
checksum: 10c0/1ca7ea711b4c3ab6fe06d32a5b0099401105a8003741bdfde2be727e3bd039887264c52b4ceb8278510cc2d4a57124c03fbe95e67614cbfbdc05cee9a495e513
checksum: 10c0/bdc3653bf7f8e6f83464812fba8cb26abdb1a7d3d4977199f6edd857a1697c829d5ac4342b626590619efbbddc9916a1847145812d32bb0d2457ee6e895f9082
languageName: node
linkType: hard
@@ -17344,12 +17346,12 @@ __metadata:
languageName: node
linkType: hard
"safe-regex2@npm:^4.0.0":
version: 4.0.1
resolution: "safe-regex2@npm:4.0.1"
"safe-regex2@npm:^5.0.0":
version: 5.0.0
resolution: "safe-regex2@npm:5.0.0"
dependencies:
ret: "npm:~0.5.0"
checksum: 10c0/fe6edc2c0fa9847b572d0f0fc2b1f487c36ae603fec65445ae38cfb40483afa85107d3b6ffe63cbe029fd06e6ccb5c5730415c1595a1011fa00bafa2b866a8f0
checksum: 10c0/83d5b1b60a5a97cb71a6e615518ec4a47761b3600aba389089be59a417498185250db2368080afc2f5e91237d68809c6c634b97a2e1cc8bd56a4c7eef2eeb6cf
languageName: node
linkType: hard
@@ -17454,8 +17456,8 @@ __metadata:
linkType: hard
"sass@npm:^1.80.6":
version: 1.85.1
resolution: "sass@npm:1.85.1"
version: 1.86.0
resolution: "sass@npm:1.86.0"
dependencies:
"@parcel/watcher": "npm:^2.4.1"
chokidar: "npm:^4.0.0"
@@ -17466,7 +17468,7 @@ __metadata:
optional: true
bin:
sass: sass.js
checksum: 10c0/f843aa1df1dca2f0e9cb2fb247e4939fd514ae4c182cdd1900a0622c0d71b40dfb1c4225f78b78e165a318287ca137ec597695db3e496408bd16a921a2bc2b3f
checksum: 10c0/921caea1fd8a450d4a986e5570ce13c4ca7b2a57da390811add3d2087ad8f46f53b34652ddcb237d8bdaad49c560b8d6eee130c733c787d058bc5a71a914c139
languageName: node
linkType: hard
@@ -19080,17 +19082,17 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
languageName: unknown
linkType: soft
"tgui-core@npm:^1.8.2":
version: 1.8.2
resolution: "tgui-core@npm:1.8.2"
"tgui-core@npm:^1.8.4":
version: 1.8.4
resolution: "tgui-core@npm:1.8.4"
peerDependencies:
react: ^18.2.0
react-dom: ^18.2.0
checksum: 10c0/05859f1affcf2cc08eec5b9227446e165ebdd7d7e6568845b9e0577ee91e166c8b5452bababe675ff031c0ba29f2f25d598258c90ee1d31ead8b1f474cbb6e22
checksum: 10c0/90ab01ef064688a76cbb7179935ddba87c734df7da8c0ef3bc897d55d15b2b0d71486b07dedf93281d1abbab05e04cfa0e69f2bfa7f054c6a16913d9acea433c
languageName: node
linkType: hard
@@ -19118,7 +19120,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
@@ -19145,7 +19147,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
tgui: "workspace:*"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-polyfill: "workspace:*"
languageName: unknown
linkType: soft
@@ -19185,7 +19187,7 @@ __metadata:
sass-loader: "npm:^16.0.3"
style-loader: "npm:^4.0.0"
swc-loader: "npm:^0.2.6"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
typescript: "npm:5.6.3"
url-loader: "npm:^4.1.1"
webpack: "npm:^5.96.1"
@@ -19213,7 +19215,7 @@ __metadata:
react: "npm:^18.3.1"
react-dom: "npm:^18.3.1"
react-popper: "npm:^2.3.0"
tgui-core: "npm:^1.8.2"
tgui-core: "npm:^1.8.4"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
@@ -19278,21 +19280,21 @@ __metadata:
languageName: node
linkType: hard
"tldts-core@npm:^6.1.84":
version: 6.1.84
resolution: "tldts-core@npm:6.1.84"
checksum: 10c0/e64b2f1d13788dc67a8c9f61e1d227b20e83328565a1eb8aeb704d991dc9ae1a0b48665260a78927ba7809793e000bb3071a21a9686d9a02a9be17f8a527e6bb
"tldts-core@npm:^6.1.85":
version: 6.1.85
resolution: "tldts-core@npm:6.1.85"
checksum: 10c0/f028759b361bef86d3dd8dbaaa010b4c3aca236ec7ba097658b9a595243bb34c98206e410cc3631055af6ed34012f5da7e9af2c4e38e218d5fc693df6ab3da33
languageName: node
linkType: hard
"tldts@npm:^6.1.32":
version: 6.1.84
resolution: "tldts@npm:6.1.84"
version: 6.1.85
resolution: "tldts@npm:6.1.85"
dependencies:
tldts-core: "npm:^6.1.84"
tldts-core: "npm:^6.1.85"
bin:
tldts: bin/cli.js
checksum: 10c0/84c865197ff8eb83283e1c1b7bc45a7e7ff9a41922dad0348c586791df63d6605a5a8e8efb6d4962b63459b2f3c0096d683041f65e29b468ccaf53fe99d9a9e0
checksum: 10c0/83bc222046f36a9ca071b662e3272bb1e98e849fa4bddfab0a3eba8804a4a539b02bcbe55e1277fe713de6677e55104da2ef9a54d006c642b6e9f26c7595d5aa
languageName: node
linkType: hard
@@ -19410,12 +19412,12 @@ __metadata:
languageName: node
linkType: hard
"tr46@npm:^5.0.0":
version: 5.0.0
resolution: "tr46@npm:5.0.0"
"tr46@npm:^5.1.0":
version: 5.1.0
resolution: "tr46@npm:5.1.0"
dependencies:
punycode: "npm:^2.3.1"
checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee
checksum: 10c0/d761f7144e0cb296187674ef245c74f761e334d7cf25ca73ef60e4c72c097c75051031c093fa1a2fee04b904977b316716a7915854bcae8fb1a371746513cbe8
languageName: node
linkType: hard
@@ -19427,11 +19429,11 @@ __metadata:
linkType: hard
"ts-api-utils@npm:^2.0.1":
version: 2.0.1
resolution: "ts-api-utils@npm:2.0.1"
version: 2.1.0
resolution: "ts-api-utils@npm:2.1.0"
peerDependencies:
typescript: ">=4.8.4"
checksum: 10c0/23fd56a958b332cac00150a652e4c84730df30571bd2faa1ba6d7b511356d1a61656621492bb6c7f15dd6e18847a1408357a0e406671d358115369a17f5bfedd
checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f
languageName: node
linkType: hard
@@ -20611,12 +20613,12 @@ __metadata:
linkType: hard
"whatwg-url@npm:^14.0.0":
version: 14.1.1
resolution: "whatwg-url@npm:14.1.1"
version: 14.2.0
resolution: "whatwg-url@npm:14.2.0"
dependencies:
tr46: "npm:^5.0.0"
tr46: "npm:^5.1.0"
webidl-conversions: "npm:^7.0.0"
checksum: 10c0/de1e9cc2f04cb000f232c839d4999384ba41b680ef8a89e7c61c9bc40354ba8593c775d068faaf0819f5866e4d6ca3e7b9b386e2123aa475bfd33da02316f476
checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272
languageName: node
linkType: hard