mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 04:28:12 +01:00
@@ -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).
|
||||
@@ -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>
|
||||
-404
File diff suppressed because one or more lines are too long
-110
File diff suppressed because one or more lines are too long
@@ -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
@@ -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>
|
||||
@@ -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
@@ -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
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
-11
File diff suppressed because one or more lines are too long
@@ -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.")
|
||||
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:*"
|
||||
}
|
||||
|
||||
@@ -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:*"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user