diff --git a/assets/chat/css/style.scss b/assets/chat/css/style.scss
index f1d218a7..fca431c7 100644
--- a/assets/chat/css/style.scss
+++ b/assets/chat/css/style.scss
@@ -535,23 +535,11 @@ hr {
}
}
-/* Broadcasts */
-.msg-broadcast {
- background-color: $color-chat-emphasize;
- color: $color-text-broadcast !important;
- font-size: 1.1em;
- font-weight: 400;
- padding-top: $gutter-md;
- padding-bottom: $gutter-md;
- time {
- margin-right: $gutter-md;
- }
-}
-
.msg-donation,
.msg-subscription,
.msg-giftsub,
-.msg-massgift {
+.msg-massgift,
+.msg-broadcast {
text-shadow: 1px 1px 3px rgba(0, 0, 0, 1);
font-size: 1.1em;
font-weight: 400;
@@ -614,6 +602,18 @@ hr {
}
}
+/* Broadcasts */
+.msg-broadcast {
+ border-color: $color-text-broadcast;
+
+ .broadcast-icon {
+ background: transparent url('../img/icon-broadcast.png') no-repeat center
+ center;
+ background-size: contain;
+ filter: invert(100%);
+ }
+}
+
/* Donations */
.msg-donation {
.donation-icon {
diff --git a/assets/chat/img/icon-broadcast.png b/assets/chat/img/icon-broadcast.png
new file mode 100644
index 00000000..1ab16b82
Binary files /dev/null and b/assets/chat/img/icon-broadcast.png differ
diff --git a/assets/chat/js/chat.js b/assets/chat/js/chat.js
index dc855cdd..c73c1dd1 100644
--- a/assets/chat/js/chat.js
+++ b/assets/chat/js/chat.js
@@ -740,6 +740,7 @@ class Chat {
MessageTypes.GIFTSUB,
MessageTypes.MASSGIFT,
MessageTypes.DONATION,
+ MessageTypes.BROADCAST,
MessageTypes.DEATH,
].includes(message.type)
) {
@@ -748,25 +749,21 @@ class Chat {
message.message.substring(0, 4).toLowerCase() === '/me ' ||
message.type === MessageTypes.DEATH;
// check if this is the current users message
- message.isown = message.user.username === this.user.username;
+ message.isown = message.user?.username === this.user.username;
// get mentions from message
message.mentioned = Chat.extractNicks(message.message).filter((a) =>
this.users.has(a.toLowerCase()),
);
// set tagged state
- message.tag = this.taggednicks.get(message.user.username);
+ message.tag = this.taggednicks.get(message.user?.username);
// set tagged note
- message.title = this.taggednotes.get(message.user.username) || '';
+ message.title = this.taggednotes.get(message.user?.username) || '';
}
// Populate highlight for this $message
if (message.type === MessageTypes.USER) {
// check if the last message was from the same user
- message.continued =
- win.lastmessage &&
- !win.lastmessage.target &&
- win.lastmessage.user &&
- win.lastmessage.user.username === message.user.username;
+ message.continued = win.isContinued(message);
// set highlighted state
message.highlighted = this.shouldHighlightMessage(message);
}
@@ -1080,30 +1077,32 @@ class Chat {
const textonly = Chat.removeSlashCmdFromText(data.data);
const usr = this.users.get(data.nick.toLowerCase());
const win = this.mainwindow;
- if (
- win.lastmessage !== null &&
+ const isCombo =
this.emoteService.canUserUseEmote(usr, textonly) &&
- Chat.removeSlashCmdFromText(win.lastmessage.message) === textonly
- ) {
- if (win.lastmessage.type === MessageTypes.EMOTE) {
- win.lastmessage.incEmoteCount();
+ Chat.removeSlashCmdFromText(win.lastmessage?.message) === textonly;
- if (this.user.equalWatching(usr.watching)) {
- win.lastmessage.ui.classList.toggle('watching-same', true);
- }
+ if (isCombo && win.lastmessage?.type === MessageTypes.EMOTE) {
+ win.lastmessage.incEmoteCount();
- this.mainwindow.update();
- } else {
- win.removeLastMessage();
- const msg = MessageBuilder.emote(textonly, data.timestamp, 2).into(
- this,
- );
+ if (this.user.equalWatching(usr.watching)) {
+ win.lastmessage.ui.classList.toggle('watching-same', true);
+ }
- if (this.user.equalWatching(usr.watching)) {
- msg.ui.classList.add('watching-same');
- }
+ this.mainwindow.update();
+ return;
+ }
+
+ if (isCombo && win.lastmessage?.type === MessageTypes.USER) {
+ win.removeLastMessage();
+ const msg = MessageBuilder.emote(textonly, data.timestamp, 2).into(this);
+
+ if (this.user.equalWatching(usr.watching)) {
+ msg.ui.classList.add('watching-same');
}
- } else if (!this.resolveMessage(data.nick, data.data)) {
+ return;
+ }
+
+ if (!this.resolveMessage(data.nick, data.data)) {
MessageBuilder.message(data.data, usr, data.timestamp).into(this);
}
}
@@ -1263,12 +1262,22 @@ class Chat {
if (!this.backlogloading) {
const retryMilli = Math.floor(Math.random() * 30000) + 4000;
setTimeout(() => window.location.reload(true), retryMilli);
+
MessageBuilder.broadcast(
- `Restart incoming in ${Math.round(retryMilli / 1000)} seconds ...`,
+ `Restart incoming in ${Math.round(retryMilli / 1000)} seconds...`,
+ new ChatUser({
+ nick: 'System',
+ id: -1,
+ }),
+ data.timestamp,
).into(this);
}
} else {
- MessageBuilder.broadcast(data.data, data.timestamp).into(this);
+ MessageBuilder.broadcast(
+ data.data,
+ new ChatUser(data.user),
+ data.timestamp,
+ ).into(this);
}
}
@@ -2360,7 +2369,7 @@ class Chat {
}
static removeSlashCmdFromText(msg) {
- return msg.replace(regexslashcmd, '').trim();
+ return msg?.replace(regexslashcmd, '').trim();
}
static extractNicks(text) {
diff --git a/assets/chat/js/focus.js b/assets/chat/js/focus.js
index dd8d4f81..f00997c9 100644
--- a/assets/chat/js/focus.js
+++ b/assets/chat/js/focus.js
@@ -48,6 +48,7 @@ class ChatUserFocus {
} else if (this.chat.settings.get('focusmentioned')) {
rule = `
.msg-death[data-username="${value}"], .msg-death[data-mentioned~="${value}"],
+ .msg-broadcast[data-username="${value}"], .msg-broadcast[data-mentioned~="${value}"],
.msg-subscription[data-username="${value}"], .msg-subscription[data-mentioned~="${value}"],
.msg-giftsub[data-username="${value}"], .msg-giftsub[data-mentioned~="${value}"], .msg-giftsub[data-giftee="${value}"],
.msg-massgift[data-username="${value}"], .msg-massgift[data-mentioned~="${value}"],
@@ -60,6 +61,7 @@ class ChatUserFocus {
} else {
rule = `
.msg-death[data-username="${value}"],
+ .msg-broadcast[data-username="${value}"],
.msg-subscription[data-username="${value}"],
.msg-giftsub[data-username="${value}"], .msg-giftsub[data-giftee="${value}"],
.msg-massgift[data-username="${value}"],
diff --git a/assets/chat/js/formatters/UrlFormatter.js b/assets/chat/js/formatters/UrlFormatter.js
index 7b182d44..6a69e8c6 100644
--- a/assets/chat/js/formatters/UrlFormatter.js
+++ b/assets/chat/js/formatters/UrlFormatter.js
@@ -71,8 +71,7 @@ export default class UrlFormatter {
const decodedUrl = self.elem.html(url).text();
const m = decodedUrl.match(self.linkregex);
if (m) {
- const encodedUrl = self.encodeUrl(m[0]);
- const normalizedUrl = this.normalizeUrl(encodedUrl);
+ const normalizedUrl = self.encodeUrl(this.normalizeUrl(m[0]));
let embedHashLink = '';
try {
@@ -114,6 +113,14 @@ export default class UrlFormatter {
return url.split('?')[0];
}
+ if (/youtu(?:be\.com|\.be)/i.test(url)) {
+ // Same as with xeets, remove the nasty share tracking query param
+ // from YouTube links.
+ const ytLink = new URL(url);
+ ytLink.searchParams.delete('si');
+ return ytLink.href;
+ }
+
return url;
}
}
diff --git a/assets/chat/js/formatters/UrlFormatter.test.js b/assets/chat/js/formatters/UrlFormatter.test.js
index 1b9400ae..5dd9253b 100644
--- a/assets/chat/js/formatters/UrlFormatter.test.js
+++ b/assets/chat/js/formatters/UrlFormatter.test.js
@@ -21,7 +21,37 @@ describe('Normalizing URLs', () => {
);
});
- test("Don't modify a URL that isn't Twitter or X", () => {
+ test('Remove the share tracking query param from a youtube.com link', () => {
+ expect(
+ urlFormatter.normalizeUrl(
+ 'https://www.youtube.com/live/2NjXXQYtUNY?si=5ALpT28ptRec6T7u&t=70',
+ ),
+ ).toBe('https://www.youtube.com/live/2NjXXQYtUNY?t=70');
+ });
+
+ test('Remove the share tracking query param from a youtu.be link', () => {
+ expect(
+ urlFormatter.normalizeUrl(
+ 'https://youtu.be/SbPP1i6INPk?si=K0qpdHBGOIJ-gBMK&t=60',
+ ),
+ ).toBe('https://youtu.be/SbPP1i6INPk?t=60');
+ });
+
+ test("Don't modify a youtube.com link that doesn't contain the share tracking query param", () => {
+ expect(
+ urlFormatter.normalizeUrl(
+ 'https://www.youtube.com/live/2NjXXQYtUNY?t=70',
+ ),
+ ).toBe('https://www.youtube.com/live/2NjXXQYtUNY?t=70');
+ });
+
+ test("Don't modify a youtu.be link that doesn't contain the share tracking query param", () => {
+ expect(urlFormatter.normalizeUrl('https://youtu.be/SbPP1i6INPk?t=60')).toBe(
+ 'https://youtu.be/SbPP1i6INPk?t=60',
+ );
+ });
+
+ test("Don't modify a URL that isn't Twitter, X or YouTube", () => {
expect(
urlFormatter.normalizeUrl('https://www.twitch.tv/search?term=vtuber'),
).toBe('https://www.twitch.tv/search?term=vtuber');
diff --git a/assets/chat/js/menus/ChatUserInfoMenu.js b/assets/chat/js/menus/ChatUserInfoMenu.js
index 39fb8ec0..088f16d1 100644
--- a/assets/chat/js/menus/ChatUserInfoMenu.js
+++ b/assets/chat/js/menus/ChatUserInfoMenu.js
@@ -13,6 +13,10 @@ export default class ChatUserInfoMenu extends ChatMenuFloating {
this.header = this.ui.find('.toolbar span');
+ this.watchingSubheader = this.ui.find(
+ '.user-info h5.watching-subheader',
+ )[0];
+
this.createdDateSubheader = this.ui.find('.user-info h5.date-subheader')[0];
this.tagSubheader = this.ui.find('.user-info h5.tag-subheader')[0];
@@ -237,6 +241,15 @@ export default class ChatUserInfoMenu extends ChatMenuFloating {
const tagNote = this.chat.taggednotes.get(this.clickedNick);
const usernameFeatures = selectedUser.classList.value;
+ const watchingEmbed = this.buildWatchingEmbed(this.clickedNick);
+ if (watchingEmbed !== '') {
+ this.watchingSubheader.style.display = '';
+ this.watchingSubheader.replaceChildren('Watching: ', watchingEmbed);
+ } else {
+ this.watchingSubheader.style.display = 'none';
+ this.watchingSubheader.replaceChildren();
+ }
+
const formattedDate = this.buildCreatedDate(this.clickedNick);
if (formattedDate) {
this.createdDateSubheader.style.display = '';
@@ -292,6 +305,14 @@ export default class ChatUserInfoMenu extends ChatMenuFloating {
this.redraw();
}
+ buildWatchingEmbed(nick) {
+ const user = this.chat.users.get(nick);
+ if (!user?.watching) {
+ return '';
+ }
+ return `${user.watching.id} on ${user.watching.platform}`;
+ }
+
buildCreatedDate(nick) {
const user = this.chat.users.get(nick.toLowerCase());
if (!user?.createdDate) {
diff --git a/assets/chat/js/messages/ChatBroadcastMessage.js b/assets/chat/js/messages/ChatBroadcastMessage.js
new file mode 100644
index 00000000..18577b57
--- /dev/null
+++ b/assets/chat/js/messages/ChatBroadcastMessage.js
@@ -0,0 +1,64 @@
+import { usernameColorFlair } from './ChatUserMessage';
+import ChatEventMessage from './ChatEventMessage';
+import MessageTypes from './MessageTypes';
+
+export default class ChatBroadcastMessage extends ChatEventMessage {
+ constructor(message, user, timestamp = null) {
+ super(message, timestamp);
+ this.type = MessageTypes.BROADCAST;
+ this.user = user;
+ }
+
+ buildUserTemplate(chat = null) {
+ if (this.user.isSystem()) {
+ return [];
+ }
+
+ const colorFlair = usernameColorFlair(chat.flairs, this.user);
+
+ /** @type HTMLAnchorElement */
+ const user = document
+ .querySelector('#user-template')
+ ?.content.cloneNode(true).firstElementChild;
+ user.title = this.title;
+ user.classList.add(colorFlair?.name);
+ user.innerText = this.user.displayName;
+
+ const ctrl = document.createElement('span');
+ ctrl.classList.toggle('ctrl');
+
+ if (this.slashme) {
+ return [user, ctrl, ' '];
+ }
+
+ ctrl.innerText = ': ';
+
+ return [user, ctrl];
+ }
+
+ html(chat = null) {
+ const eventTemplate = super.html(chat);
+
+ const text = eventTemplate.querySelector('.event-bottom')?.innerHTML;
+ eventTemplate.querySelector('.event-bottom').remove();
+ eventTemplate.querySelector('.event-info').innerHTML = text;
+
+ const user = this.buildUserTemplate(chat);
+
+ eventTemplate.querySelector('.event-icon').classList.add('broadcast-icon');
+ eventTemplate.querySelector('.event-info').prepend(...user);
+
+ const classes = Array.from(eventTemplate.classList);
+ const attributes = eventTemplate
+ .getAttributeNames()
+ .reduce((object, attributeName) => {
+ if (attributeName === 'class') return object;
+ return {
+ ...object,
+ [attributeName]: eventTemplate.getAttribute(attributeName),
+ };
+ }, {});
+
+ return this.wrap(eventTemplate.innerHTML, classes, attributes);
+ }
+}
diff --git a/assets/chat/js/messages/ChatEventMessage.js b/assets/chat/js/messages/ChatEventMessage.js
index 9936c719..06834cad 100644
--- a/assets/chat/js/messages/ChatEventMessage.js
+++ b/assets/chat/js/messages/ChatEventMessage.js
@@ -16,7 +16,7 @@ export default class ChatEventMessage extends ChatMessage {
.querySelector('#event-template')
?.content.cloneNode(true).firstElementChild;
- if (this.user && this.user.username)
+ if (this.user && this.user.username && !this.user.isSystem())
eventTemplate.dataset.username = this.user.username;
if (this.mentioned && this.mentioned.length > 0)
eventTemplate.dataset.mentioned = this.mentioned.join(' ').toLowerCase();
diff --git a/assets/chat/js/messages/ChatMessage.js b/assets/chat/js/messages/ChatMessage.js
index e277b6ca..da62f3b0 100644
--- a/assets/chat/js/messages/ChatMessage.js
+++ b/assets/chat/js/messages/ChatMessage.js
@@ -154,4 +154,15 @@ export default class ChatMessage extends ChatUIMessage {
user.equalWatching(this.watching),
);
}
+
+ /**
+ * @param {boolean} isContinued
+ */
+ setContinued(isContinued) {
+ this.ui.classList.toggle('msg-continue', isContinued);
+ const ctrl = this.ui.querySelector('.ctrl');
+ if (ctrl) ctrl.textContent = isContinued ? '' : ': ';
+
+ this.continued = isContinued;
+ }
}
diff --git a/assets/chat/js/messages/MessageBuilder.js b/assets/chat/js/messages/MessageBuilder.js
index fe74fe79..53739c20 100644
--- a/assets/chat/js/messages/MessageBuilder.js
+++ b/assets/chat/js/messages/MessageBuilder.js
@@ -9,6 +9,7 @@ import ChatDonationMessage from './ChatDonationMessage';
import ChatRegularSubscriptionMessage from './subscriptions/ChatRegularSubscriptionMessage';
import ChatGiftedSubscriptionMessage from './subscriptions/ChatGiftedSubscriptionMessage';
import ChatMassSubscriptionMessage from './subscriptions/ChatMassSubscriptionMessage';
+import ChatBroadcastMessage from './ChatBroadcastMessage';
import ChatDeathMessage from './ChatDeathMessage';
export default class MessageBuilder {
@@ -28,8 +29,8 @@ export default class MessageBuilder {
return new ChatMessage(message, timestamp, MessageTypes.INFO);
}
- static broadcast(message, timestamp = null) {
- return new ChatMessage(message, timestamp, MessageTypes.BROADCAST);
+ static broadcast(message, user, timestamp = null) {
+ return new ChatBroadcastMessage(message, user, timestamp);
}
static command(message, timestamp = null) {
diff --git a/assets/chat/js/messages/index.js b/assets/chat/js/messages/index.js
index f20c76b8..e6dd08fb 100644
--- a/assets/chat/js/messages/index.js
+++ b/assets/chat/js/messages/index.js
@@ -12,4 +12,5 @@ export {
default as PinnedMessage,
checkIfPinWasDismissed,
} from './PinnedMessage';
+export { default as ChatBroadcastMessage } from './ChatBroadcastMessage';
export { default as ChatDeathMessage } from './ChatDeathMessage';
diff --git a/assets/chat/js/messages/subscriptions/ChatGiftedSubscriptionMessage.js b/assets/chat/js/messages/subscriptions/ChatGiftedSubscriptionMessage.js
index 07be0899..f3d662f5 100644
--- a/assets/chat/js/messages/subscriptions/ChatGiftedSubscriptionMessage.js
+++ b/assets/chat/js/messages/subscriptions/ChatGiftedSubscriptionMessage.js
@@ -22,7 +22,7 @@ export default class ChatGiftedSubscriptionMessage extends ChatSubscriptionMessa
};
}, {});
- attributes['data-giftee'] = this.giftee.username.toLowerCase();
+ attributes['data-giftee'] = this.giftee.username;
message.querySelector('.subscription-icon').classList.add('gift');
@@ -33,7 +33,7 @@ export default class ChatGiftedSubscriptionMessage extends ChatSubscriptionMessa
const gifteeColorFlair = usernameColorFlair(chat.flairs, this.giftee);
giftee.classList.add(gifteeColorFlair?.name);
- giftee.innerText = this.giftee.username;
+ giftee.innerText = this.giftee.displayName;
const subscriptionInfo = message.querySelector('.event-info');
const user = message.querySelector('.user');
diff --git a/assets/chat/js/user.js b/assets/chat/js/user.js
index fe6987b5..35039836 100644
--- a/assets/chat/js/user.js
+++ b/assets/chat/js/user.js
@@ -125,6 +125,10 @@ class ChatUser {
this.watching?.id === embed?.id
);
}
+
+ isSystem() {
+ return this.id === -1;
+ }
}
export default ChatUser;
diff --git a/assets/chat/js/window.js b/assets/chat/js/window.js
index 4b1f7da9..4ce703e8 100644
--- a/assets/chat/js/window.js
+++ b/assets/chat/js/window.js
@@ -122,18 +122,21 @@ class ChatWindow extends EventEmitter {
* this window.
*/
updateMessages(chat) {
- for (const message of this.messages) {
+ for (const [i, message] of this.messages.entries()) {
if (message.type !== MessageTypes.UI) {
message.updateTimeFormat();
}
- if (message.user) {
+ if (message.user && !message.user.isSystem()) {
const { username } = message.user;
message.setOwnMessage(username === chat.user.username);
message.ignore(chat.ignored(username, message.message));
message.highlight(chat.shouldHighlightMessage(message));
- message.setTag(chat.taggednicks.get(username));
+ if (message.type === MessageTypes.USER) {
+ message.setContinued(this.isContinued(message, this.messages[i - 1]));
+ message.setTag(chat.taggednicks.get(username));
+ }
message.setTagTitle(chat.taggednotes.get(username));
message.setWatching(chat.user);
@@ -149,6 +152,21 @@ class ChatWindow extends EventEmitter {
this.messages = this.messages.filter((m) => m !== this.lastmessage);
}
+ /**
+ * @param {ChatMessage} message
+ * @param {ChatMessage} lastMessage
+ * @returns {boolean}
+ */
+ isContinued(message, lastMessage = this.lastmessage) {
+ return (
+ lastMessage &&
+ !lastMessage.target &&
+ lastMessage.user &&
+ (!lastMessage.ignored || lastMessage.continued) && // messages should not appear as "continued" if the previous message is ignored and was the start of the thread
+ lastMessage.user.username === message.user.username
+ );
+ }
+
cleanupThrottle = throttle(50, this.cleanup);
}
diff --git a/assets/views/embed.html b/assets/views/embed.html
index 20f96e01..9665edd7 100644
--- a/assets/views/embed.html
+++ b/assets/views/embed.html
@@ -255,6 +255,7 @@
Users
User Info
+
diff --git a/package-lock.json b/package-lock.json
index 65db9c13..141bbc67 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -90,12 +90,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
},
"engines": {
@@ -112,22 +112,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz",
- "integrity": "sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz",
+ "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.22.15",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.22.15",
- "@babel/helpers": "^7.22.15",
- "@babel/parser": "^7.22.15",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.6",
+ "@babel/parser": "^7.23.6",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.22.15",
- "@babel/types": "^7.22.15",
- "convert-source-map": "^1.7.0",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
@@ -141,13 +141,19 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
"node_modules/@babel/generator": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
- "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.15",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -181,14 +187,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -436,9 +442,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -477,26 +483,26 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
- "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
+ "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
"dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz",
- "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
@@ -505,9 +511,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz",
- "integrity": "sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -1783,20 +1789,20 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz",
- "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.22.15",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15",
- "debug": "^4.1.0",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -1804,12 +1810,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz",
- "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -4233,9 +4239,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"funding": [
{
"type": "opencollective",
@@ -4251,9 +4257,9 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
@@ -4341,9 +4347,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001561",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
- "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==",
+ "version": "1.0.30001568",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz",
+ "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==",
"funding": [
{
"type": "opencollective",
@@ -5456,9 +5462,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.582",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz",
- "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA=="
+ "version": "1.4.610",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz",
+ "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg=="
},
"node_modules/emittery": {
"version": "0.13.1",
@@ -5747,9 +5753,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
- "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
"dev": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
@@ -9897,9 +9903,9 @@
"dev": true
},
"node_modules/jquery": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
- "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ=="
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
+ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
},
"node_modules/js-tokens": {
"version": "4.0.0",
@@ -10946,9 +10952,9 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -11645,9 +11651,9 @@
}
},
"node_modules/prettier": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
- "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
+ "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -13781,9 +13787,9 @@
}
},
"node_modules/webpack": {
- "version": "5.88.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
- "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
+ "version": "5.89.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz",
+ "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==",
"dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.0",
@@ -14347,12 +14353,12 @@
}
},
"@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
}
},
@@ -14363,35 +14369,43 @@
"dev": true
},
"@babel/core": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz",
- "integrity": "sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz",
+ "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.22.15",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.22.15",
- "@babel/helpers": "^7.22.15",
- "@babel/parser": "^7.22.15",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.6",
+ "@babel/parser": "^7.23.6",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.22.15",
- "@babel/types": "^7.22.15",
- "convert-source-map": "^1.7.0",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ }
}
},
"@babel/generator": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
- "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"requires": {
- "@babel/types": "^7.22.15",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -14416,14 +14430,14 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -14607,9 +14621,9 @@
}
},
"@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true
},
"@babel/helper-validator-identifier": {
@@ -14636,31 +14650,31 @@
}
},
"@babel/helpers": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
- "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
+ "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
"dev": true,
"requires": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6"
}
},
"@babel/highlight": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz",
- "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.15.tgz",
- "integrity": "sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -15518,30 +15532,30 @@
}
},
"@babel/traverse": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz",
- "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.22.15",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15",
- "debug": "^4.1.0",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz",
- "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
@@ -17445,13 +17459,13 @@
}
},
"browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"requires": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
}
},
@@ -17517,9 +17531,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001561",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
- "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw=="
+ "version": "1.0.30001568",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz",
+ "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A=="
},
"caseless": {
"version": "0.12.0",
@@ -18350,9 +18364,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.4.582",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz",
- "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA=="
+ "version": "1.4.610",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz",
+ "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg=="
},
"emittery": {
"version": "0.13.1",
@@ -18762,9 +18776,9 @@
}
},
"eslint-config-prettier": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
- "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
"dev": true,
"requires": {}
},
@@ -21600,9 +21614,9 @@
"dev": true
},
"jquery": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
- "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ=="
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
+ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
},
"js-tokens": {
"version": "4.0.0",
@@ -22355,9 +22369,9 @@
"dev": true
},
"node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
},
"normalize-path": {
"version": "3.0.0",
@@ -22857,9 +22871,9 @@
"dev": true
},
"prettier": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
- "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
+ "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
"dev": true
},
"pretty-error": {
@@ -24461,9 +24475,9 @@
"dev": true
},
"webpack": {
- "version": "5.88.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
- "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
+ "version": "5.89.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz",
+ "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==",
"requires": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.0",