@necrolab/dashboard 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +45 -0
- package/.eslintrc.js +24 -0
- package/.prettierignore +1 -0
- package/.prettierrc +10 -0
- package/.vscode/extensions.json +3 -0
- package/ICONS.md +21 -0
- package/README.md +65 -0
- package/backend/api.js +430 -0
- package/backend/auth.js +62 -0
- package/backend/batching.js +43 -0
- package/backend/endpoints.js +343 -0
- package/backend/index.js +23 -0
- package/backend/mock-data.js +66 -0
- package/backend/mock-src/classes/logger.js +112 -0
- package/backend/mock-src/classes/utils.js +42 -0
- package/backend/mock-src/ticketmaster.js +92 -0
- package/backend/validator.js +62 -0
- package/config/configs.json +20 -0
- package/config/filter.json +3 -0
- package/config/presale.csv +3 -0
- package/config/proxies.txt +6 -0
- package/config/used-codes.json +4 -0
- package/index.html +114 -0
- package/index.js +2 -0
- package/jsconfig.json +16 -0
- package/package.json +48 -0
- package/postcss.config.js +6 -0
- package/postinstall.js +9 -0
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/flags/ae.svg +1 -0
- package/public/flags/at.svg +1 -0
- package/public/flags/au.svg +1 -0
- package/public/flags/be.svg +1 -0
- package/public/flags/ch.svg +1 -0
- package/public/flags/cz.svg +1 -0
- package/public/flags/de.svg +1 -0
- package/public/flags/dk.svg +1 -0
- package/public/flags/es.svg +1 -0
- package/public/flags/nl.svg +1 -0
- package/public/flags/no.svg +1 -0
- package/public/flags/nz.svg +1 -0
- package/public/flags/pl.svg +1 -0
- package/public/flags/se.svg +1 -0
- package/public/flags/uk.svg +1 -0
- package/public/flags/us.svg +1 -0
- package/public/img/award.svg +3 -0
- package/public/img/background.svg +14 -0
- package/public/img/bag_w.svg +12 -0
- package/public/img/banks/amex.svg +4 -0
- package/public/img/banks/mastercard.svg +4 -0
- package/public/img/banks/visa.svg +4 -0
- package/public/img/camera.svg +3 -0
- package/public/img/close.svg +3 -0
- package/public/img/controls/disable.svg +5 -0
- package/public/img/controls/enable.svg +5 -0
- package/public/img/groups.svg +3 -0
- package/public/img/hand.svg +3 -0
- package/public/img/key.svg +3 -0
- package/public/img/logo.png +0 -0
- package/public/img/logo_icon.png +0 -0
- package/public/img/logo_icon_2.png +0 -0
- package/public/img/logo_trans.png +0 -0
- package/public/img/loyalty.svg +3 -0
- package/public/img/mail.svg +3 -0
- package/public/img/pencil.svg +3 -0
- package/public/img/profile.svg +4 -0
- package/public/img/reload.svg +3 -0
- package/public/img/sandclock.svg +25 -0
- package/public/img/save.svg +5 -0
- package/public/img/savings.svg +3 -0
- package/public/img/scanner.svg +3 -0
- package/public/img/sell.svg +3 -0
- package/public/img/shield.svg +3 -0
- package/public/img/ski.svg +3 -0
- package/public/img/stadium.svg +8 -0
- package/public/img/stadium_w.svg +8 -0
- package/public/img/timer.svg +3 -0
- package/public/manifest.json +27 -0
- package/public/robots.txt +2 -0
- package/run +10 -0
- package/src/App.vue +307 -0
- package/src/assets/css/_input.scss +197 -0
- package/src/assets/css/main.scss +269 -0
- package/src/assets/css/tailwind.css +3 -0
- package/src/assets/img/award.svg +3 -0
- package/src/assets/img/background.svg +11 -0
- package/src/assets/img/camera.svg +3 -0
- package/src/assets/img/close.svg +3 -0
- package/src/assets/img/eyes/closed.svg +13 -0
- package/src/assets/img/eyes/open.svg +12 -0
- package/src/assets/img/groups.svg +3 -0
- package/src/assets/img/hand.svg +3 -0
- package/src/assets/img/key.svg +3 -0
- package/src/assets/img/logo.png +0 -0
- package/src/assets/img/logo_icon.png +0 -0
- package/src/assets/img/logo_icon_2.png +0 -0
- package/src/assets/img/logo_trans.png +0 -0
- package/src/assets/img/loyalty.svg +3 -0
- package/src/assets/img/mail.svg +3 -0
- package/src/assets/img/pencil.svg +3 -0
- package/src/assets/img/reload.svg +3 -0
- package/src/assets/img/savings.svg +3 -0
- package/src/assets/img/scanner.svg +3 -0
- package/src/assets/img/sell.svg +3 -0
- package/src/assets/img/shield.svg +3 -0
- package/src/assets/img/ski.svg +3 -0
- package/src/assets/img/square_check.svg +5 -0
- package/src/assets/img/square_uncheck.svg +5 -0
- package/src/assets/img/stadium.svg +8 -0
- package/src/assets/img/timer.svg +3 -0
- package/src/assets/img/wildcard.svg +7 -0
- package/src/components/Auth/LoginForm.vue +48 -0
- package/src/components/Editors/Account/Account.vue +119 -0
- package/src/components/Editors/Account/AccountCreator.vue +147 -0
- package/src/components/Editors/Account/AccountView.vue +87 -0
- package/src/components/Editors/Account/CreateAccount.vue +106 -0
- package/src/components/Editors/Profile/CreateProfile.vue +321 -0
- package/src/components/Editors/Profile/Profile.vue +142 -0
- package/src/components/Editors/Profile/ProfileCountryChooser.vue +75 -0
- package/src/components/Editors/Profile/ProfileView.vue +96 -0
- package/src/components/Editors/TagLabel.vue +16 -0
- package/src/components/Editors/TagToggle.vue +41 -0
- package/src/components/Filter/Filter.vue +409 -0
- package/src/components/Filter/FilterPreview.vue +236 -0
- package/src/components/Filter/PriceSortToggle.vue +105 -0
- package/src/components/Table/Header.vue +5 -0
- package/src/components/Table/Row.vue +5 -0
- package/src/components/Table/Table.vue +14 -0
- package/src/components/Table/index.js +4 -0
- package/src/components/Tasks/CheckStock.vue +62 -0
- package/src/components/Tasks/Controls/DesktopControls.vue +73 -0
- package/src/components/Tasks/Controls/MobileControls.vue +32 -0
- package/src/components/Tasks/Controls/index.js +3 -0
- package/src/components/Tasks/CreateTaskAXS.vue +339 -0
- package/src/components/Tasks/CreateTaskTM.vue +459 -0
- package/src/components/Tasks/MassEdit.vue +50 -0
- package/src/components/Tasks/QuickSettings.vue +167 -0
- package/src/components/Tasks/ScrapeVenue.vue +42 -0
- package/src/components/Tasks/Stats.vue +66 -0
- package/src/components/Tasks/Task.vue +296 -0
- package/src/components/Tasks/TaskLabel.vue +20 -0
- package/src/components/Tasks/TaskView.vue +126 -0
- package/src/components/Tasks/Utilities.vue +33 -0
- package/src/components/icons/Award.vue +8 -0
- package/src/components/icons/Bag.vue +8 -0
- package/src/components/icons/BagWhite.vue +8 -0
- package/src/components/icons/Box.vue +8 -0
- package/src/components/icons/Camera.vue +8 -0
- package/src/components/icons/Cart.vue +8 -0
- package/src/components/icons/Check.vue +5 -0
- package/src/components/icons/Checkmark.vue +11 -0
- package/src/components/icons/Click.vue +8 -0
- package/src/components/icons/Close.vue +21 -0
- package/src/components/icons/CloseX.vue +5 -0
- package/src/components/icons/Console.vue +13 -0
- package/src/components/icons/Down.vue +8 -0
- package/src/components/icons/Edit.vue +13 -0
- package/src/components/icons/Event.vue +8 -0
- package/src/components/icons/Expand.vue +8 -0
- package/src/components/icons/Filter.vue +13 -0
- package/src/components/icons/Gear.vue +8 -0
- package/src/components/icons/Group.vue +8 -0
- package/src/components/icons/Hand.vue +8 -0
- package/src/components/icons/Key.vue +21 -0
- package/src/components/icons/Logout.vue +13 -0
- package/src/components/icons/Loyalty.vue +8 -0
- package/src/components/icons/Mail.vue +8 -0
- package/src/components/icons/Menu.vue +8 -0
- package/src/components/icons/Pause.vue +5 -0
- package/src/components/icons/Pencil.vue +21 -0
- package/src/components/icons/Play.vue +8 -0
- package/src/components/icons/Plus.vue +8 -0
- package/src/components/icons/Profile.vue +18 -0
- package/src/components/icons/Reload.vue +7 -0
- package/src/components/icons/Sandclock.vue +33 -0
- package/src/components/icons/Savings.vue +8 -0
- package/src/components/icons/Scanner.vue +8 -0
- package/src/components/icons/Scrape.vue +8 -0
- package/src/components/icons/Sell.vue +21 -0
- package/src/components/icons/Shield.vue +8 -0
- package/src/components/icons/Shrink.vue +8 -0
- package/src/components/icons/Ski.vue +8 -0
- package/src/components/icons/Spinner.vue +42 -0
- package/src/components/icons/SquareCheck.vue +18 -0
- package/src/components/icons/SquareUncheck.vue +18 -0
- package/src/components/icons/Stadium.vue +13 -0
- package/src/components/icons/StadiumWhite.vue +13 -0
- package/src/components/icons/Status.vue +8 -0
- package/src/components/icons/Tag.vue +8 -0
- package/src/components/icons/Tasks.vue +13 -0
- package/src/components/icons/Ticket.vue +8 -0
- package/src/components/icons/Timer.vue +8 -0
- package/src/components/icons/Trash.vue +8 -0
- package/src/components/icons/Up.vue +10 -0
- package/src/components/icons/Wildcard.vue +18 -0
- package/src/components/icons/index.js +111 -0
- package/src/components/ui/Modal.vue +61 -0
- package/src/components/ui/Navbar.vue +207 -0
- package/src/components/ui/ReconnectIndicator.vue +90 -0
- package/src/components/ui/Splash.vue +24 -0
- package/src/components/ui/controls/CountryChooser.vue +87 -0
- package/src/components/ui/controls/EyeToggle.vue +11 -0
- package/src/components/ui/controls/atomic/Checkbox.vue +28 -0
- package/src/components/ui/controls/atomic/Dropdown.vue +138 -0
- package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
- package/src/components/ui/controls/atomic/MultiDropdown.vue +262 -0
- package/src/components/ui/controls/atomic/Switch.vue +84 -0
- package/src/libs/Filter.js +593 -0
- package/src/libs/ansii.js +565 -0
- package/src/libs/panzoom.js +1413 -0
- package/src/main.js +23 -0
- package/src/registerServiceWorker.js +32 -0
- package/src/router/index.js +65 -0
- package/src/stores/cities.json +1 -0
- package/src/stores/connection.js +399 -0
- package/src/stores/countries.js +88 -0
- package/src/stores/logger.js +103 -0
- package/src/stores/requests.js +88 -0
- package/src/stores/sampleData.js +1034 -0
- package/src/stores/ui.js +584 -0
- package/src/stores/utils.js +554 -0
- package/src/types/index.js +42 -0
- package/src/utils/debug.js +1 -0
- package/src/views/Accounts.vue +191 -0
- package/src/views/Console.vue +224 -0
- package/src/views/Editor.vue +785 -0
- package/src/views/FilterBuilder.vue +785 -0
- package/src/views/Login.vue +27 -0
- package/src/views/Profiles.vue +209 -0
- package/src/views/Tasks.vue +157 -0
- package/static/offline.html +184 -0
- package/tailwind.config.js +57 -0
- package/vite.config.js +63 -0
- package/vue.config.js +32 -0
- package/workbox-config.js +66 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const { createLogger } = require("./classes/logger");
|
|
2
|
+
|
|
3
|
+
module.exports = class TicketMaster {
|
|
4
|
+
constructor(taskData) {
|
|
5
|
+
this.taskId = taskData.taskId || "T-" + ++Bot.CurrentTaskId;
|
|
6
|
+
this.logger = createLogger(this.taskId);
|
|
7
|
+
this.data = taskData;
|
|
8
|
+
this.data.taskId = this.taskId;
|
|
9
|
+
this.logger.taskId = this.taskId;
|
|
10
|
+
this.logger.user = "admin";
|
|
11
|
+
this.logger.siteId = taskData.siteId;
|
|
12
|
+
|
|
13
|
+
this.data.account = this.data.account || "test@email.com";
|
|
14
|
+
this.data.email = this.data.email || "test@email.com";
|
|
15
|
+
this.data.password = this.data.password || "p@ssword";
|
|
16
|
+
this.data.proxy = this.data.proxy || "127.0.0.1";
|
|
17
|
+
this.data.tickets = this.data.tickets || "-";
|
|
18
|
+
this.data.status = this.data.status || "Created";
|
|
19
|
+
this.data.active = false;
|
|
20
|
+
this.data.statusColor = "green";
|
|
21
|
+
this.data.expirationTime = Date.now();
|
|
22
|
+
|
|
23
|
+
this.data.eventVenue = "Test Venue";
|
|
24
|
+
this.data.eventDate = Date.now();
|
|
25
|
+
this.data.eventLocalDate = Date.now();
|
|
26
|
+
this.data.eventName = "Test Event";
|
|
27
|
+
this.data.reservedTicketsList = "ticket1 | ticket2 | ticket3\n$100";
|
|
28
|
+
|
|
29
|
+
refreshTaskOnFrontEnd(taskData);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
stripDown() {
|
|
33
|
+
return this.data;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
setError(e) {
|
|
37
|
+
this.error = e;
|
|
38
|
+
this.status = e;
|
|
39
|
+
this.data.active = false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
start() {
|
|
43
|
+
this.logger.Info("Starting task");
|
|
44
|
+
this.data.active = true;
|
|
45
|
+
refreshTaskOnFrontEnd(this.data);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
stop(deleted = false) {
|
|
49
|
+
this.logger.Error(deleted ? "Deleting task" : "Stopping task");
|
|
50
|
+
this.data.active = false;
|
|
51
|
+
this.data.statusColor = "red";
|
|
52
|
+
this.logger.ENABLED = false;
|
|
53
|
+
if (!deleted) {
|
|
54
|
+
this.setError("Stopped");
|
|
55
|
+
refreshTaskOnFrontEnd(this.data);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
destroy() {
|
|
60
|
+
this.hidden = true;
|
|
61
|
+
this.stop(true);
|
|
62
|
+
delete Bot.Tasks[this.taskId];
|
|
63
|
+
refreshTaskOnFrontEnd({
|
|
64
|
+
taskId: this.taskId,
|
|
65
|
+
removed: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
get status() {
|
|
70
|
+
return this.statusString || "";
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
set status(value) {
|
|
74
|
+
if (!this.active && !["Idle", "Stopped"].includes(value)) return;
|
|
75
|
+
var oldValue = this.statusString + "";
|
|
76
|
+
this.statusString = value;
|
|
77
|
+
if (!this.hidden && global.refreshTaskOnFrontEnd && this.statusString != oldValue)
|
|
78
|
+
try {
|
|
79
|
+
refreshTaskOnFrontEnd(this.stripDown(), value, this.statusString);
|
|
80
|
+
} catch {
|
|
81
|
+
/* empty */
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
scrapeVenue() {
|
|
86
|
+
this.logger.Info("Scraping venue map");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
scrapeSeats() {
|
|
90
|
+
this.logger.Info("Scraping seats");
|
|
91
|
+
}
|
|
92
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const utils = require("./mock-src/classes/utils");
|
|
2
|
+
|
|
3
|
+
const none = (v) => {
|
|
4
|
+
return v === undefined;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const fields = {
|
|
8
|
+
// field: [type, required, default]
|
|
9
|
+
eventId: ["string", true, ""],
|
|
10
|
+
email: ["string", false, ""],
|
|
11
|
+
proxy: ["string", false, ""],
|
|
12
|
+
quantity: ["number", false, 4],
|
|
13
|
+
presaleCode: ["string", false, ""],
|
|
14
|
+
manual: ["boolean", false, false],
|
|
15
|
+
doNotPay: ["boolean", false, false],
|
|
16
|
+
quickQueue: ["boolean", true, false],
|
|
17
|
+
loginAfterCart: ["boolean", true, false],
|
|
18
|
+
smartTimer: ["boolean", false, false]
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const validateTaskData = (task) => {
|
|
22
|
+
for (const [field, options] of Object.entries(fields)) {
|
|
23
|
+
// Check if field exists
|
|
24
|
+
if (options[1] && none(task[field])) task[field] = options[2];
|
|
25
|
+
|
|
26
|
+
// Check if field has correct type
|
|
27
|
+
if (typeof task[field] !== options[0] && options[1]) return `Field ${field} must be type ${options[0]}`;
|
|
28
|
+
|
|
29
|
+
// if email or proxy and is empty, get random one
|
|
30
|
+
|
|
31
|
+
if (field === "email") {
|
|
32
|
+
if (task["email"]) {
|
|
33
|
+
if (task.email.includes(":")) {
|
|
34
|
+
var splitEmail = task.email.split(":");
|
|
35
|
+
task.email = splitEmail[0];
|
|
36
|
+
task.password = splitEmail[1];
|
|
37
|
+
} else if (task.email.includes("@")) {
|
|
38
|
+
var accountInDb = Bot.TM.Accounts.find((t) => t.email.toLowerCase() == task.email.toLowerCase());
|
|
39
|
+
if (accountInDb) task.account = accountInDb;
|
|
40
|
+
else return "Bad email format";
|
|
41
|
+
}
|
|
42
|
+
} else task.account = utils.pickAccount(task.accountTag);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (field === "proxy" && !task[field]) task[field] = utils.pickProxy();
|
|
46
|
+
|
|
47
|
+
// If field is empty, use default one
|
|
48
|
+
// Also make sure that it isnt a bool
|
|
49
|
+
if (!task[field] && typeof task[field] !== "boolean") task[field] = options[2];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (!task.account && !task.email && !task.password) return "Account errors";
|
|
53
|
+
|
|
54
|
+
if (task.siteId === "TM_US") {
|
|
55
|
+
if (!/^\w{16}$/.test(task.eventId)) return "US EventId is not valid";
|
|
56
|
+
} else {
|
|
57
|
+
if (!/^\d{5,10}$/.test(task.eventId)) return "EU EventId is not valid";
|
|
58
|
+
}
|
|
59
|
+
return task;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
module.exports = validateTaskData;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "Test config",
|
|
4
|
+
"config": {
|
|
5
|
+
"eventId": "01005D5C92031D57",
|
|
6
|
+
"presaleCode": "SanFResaleCode",
|
|
7
|
+
"quantity": 5,
|
|
8
|
+
"manual": false,
|
|
9
|
+
"doNotPay": false,
|
|
10
|
+
"incapsulaBypass": false,
|
|
11
|
+
"quickQueue": true,
|
|
12
|
+
"loginAfterCart": false,
|
|
13
|
+
"smartTimer": false,
|
|
14
|
+
"presaleMode": false,
|
|
15
|
+
"agedAccount": false,
|
|
16
|
+
"accountTag": "admin",
|
|
17
|
+
"profileTags": ["Any"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
]
|
package/index.html
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" href="/favicon.ico" />
|
|
6
|
+
<meta
|
|
7
|
+
name="viewport"
|
|
8
|
+
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"
|
|
9
|
+
/>
|
|
10
|
+
<meta name="description" content="Necro Lab - dashboard" />
|
|
11
|
+
<title>Necro Lab - Dashboard</title>
|
|
12
|
+
<!-- DNS prefetch for external resources -->
|
|
13
|
+
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
|
|
14
|
+
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
|
|
15
|
+
|
|
16
|
+
<!-- Preconnect for critical external resources -->
|
|
17
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
18
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
19
|
+
<link
|
|
20
|
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
|
|
21
|
+
rel="stylesheet"
|
|
22
|
+
/>
|
|
23
|
+
|
|
24
|
+
<!-- Preload critical fonts -->
|
|
25
|
+
<link
|
|
26
|
+
rel="preload"
|
|
27
|
+
href="https://fonts.gstatic.com/s/inter/v12/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZ9hiA.woff2"
|
|
28
|
+
as="font"
|
|
29
|
+
type="font/woff2"
|
|
30
|
+
crossorigin
|
|
31
|
+
/>
|
|
32
|
+
|
|
33
|
+
<!-- Preload critical assets -->
|
|
34
|
+
<link rel="preload" as="image" href="/img/background.svg" />
|
|
35
|
+
<link rel="preload" as="image" href="/img/logo_trans.png" />
|
|
36
|
+
<link rel="preload" as="image" href="/img/logo.png" />
|
|
37
|
+
|
|
38
|
+
<!-- Prefetch core navigation icons -->
|
|
39
|
+
<link rel="prefetch" as="image" href="/img/close.svg" />
|
|
40
|
+
<link rel="prefetch" as="image" href="/img/mail.svg" />
|
|
41
|
+
<link rel="prefetch" as="image" href="/img/groups.svg" />
|
|
42
|
+
<link rel="prefetch" as="image" href="/img/reload.svg" />
|
|
43
|
+
|
|
44
|
+
<!-- Prefetch task-related icons -->
|
|
45
|
+
<link rel="prefetch" as="image" href="/img/pencil.svg" />
|
|
46
|
+
<link rel="prefetch" as="image" href="/img/scanner.svg" />
|
|
47
|
+
<link rel="prefetch" as="image" href="/img/key.svg" />
|
|
48
|
+
<link rel="prefetch" as="image" href="/img/camera.svg" />
|
|
49
|
+
<link rel="prefetch" as="image" href="/img/timer.svg" />
|
|
50
|
+
<link rel="prefetch" as="image" href="/img/hand.svg" />
|
|
51
|
+
<link rel="prefetch" as="image" href="/img/savings.svg" />
|
|
52
|
+
<link rel="prefetch" as="image" href="/img/loyalty.svg" />
|
|
53
|
+
<link rel="prefetch" as="image" href="/img/shield.svg" />
|
|
54
|
+
<link rel="prefetch" as="image" href="/img/ski.svg" />
|
|
55
|
+
<link rel="prefetch" as="image" href="/img/sell.svg" />
|
|
56
|
+
<link rel="prefetch" as="image" href="/img/award.svg" />
|
|
57
|
+
<link rel="prefetch" as="image" href="/img/stadium.svg" />
|
|
58
|
+
<link rel="prefetch" as="image" href="/img/stadium_w.svg" />
|
|
59
|
+
<link rel="prefetch" as="image" href="/img/bag_w.svg" />
|
|
60
|
+
<link rel="prefetch" as="image" href="/img/sandclock.svg" />
|
|
61
|
+
<link rel="prefetch" as="image" href="/img/profile.svg" />
|
|
62
|
+
|
|
63
|
+
<!-- Prefetch control icons -->
|
|
64
|
+
<link rel="prefetch" as="image" href="/img/controls/enable.svg" />
|
|
65
|
+
<link rel="prefetch" as="image" href="/img/controls/disable.svg" />
|
|
66
|
+
|
|
67
|
+
<!-- Prefetch payment icons -->
|
|
68
|
+
<link rel="prefetch" as="image" href="/img/banks/visa.svg" />
|
|
69
|
+
<link rel="prefetch" as="image" href="/img/banks/mastercard.svg" />
|
|
70
|
+
<link rel="prefetch" as="image" href="/img/banks/amex.svg" />
|
|
71
|
+
|
|
72
|
+
<!-- Prefetch all flag icons (country selector) -->
|
|
73
|
+
<link rel="prefetch" as="image" href="/flags/us.svg" />
|
|
74
|
+
<link rel="prefetch" as="image" href="/flags/uk.svg" />
|
|
75
|
+
<link rel="prefetch" as="image" href="/flags/au.svg" />
|
|
76
|
+
<link rel="prefetch" as="image" href="/flags/de.svg" />
|
|
77
|
+
<link rel="prefetch" as="image" href="/flags/nl.svg" />
|
|
78
|
+
<link rel="prefetch" as="image" href="/flags/at.svg" />
|
|
79
|
+
<link rel="prefetch" as="image" href="/flags/be.svg" />
|
|
80
|
+
<link rel="prefetch" as="image" href="/flags/ch.svg" />
|
|
81
|
+
<link rel="prefetch" as="image" href="/flags/cz.svg" />
|
|
82
|
+
<link rel="prefetch" as="image" href="/flags/dk.svg" />
|
|
83
|
+
<link rel="prefetch" as="image" href="/flags/es.svg" />
|
|
84
|
+
<link rel="prefetch" as="image" href="/flags/no.svg" />
|
|
85
|
+
<link rel="prefetch" as="image" href="/flags/nz.svg" />
|
|
86
|
+
<link rel="prefetch" as="image" href="/flags/pl.svg" />
|
|
87
|
+
<link rel="prefetch" as="image" href="/flags/se.svg" />
|
|
88
|
+
<link rel="prefetch" as="image" href="/flags/ae.svg" />
|
|
89
|
+
|
|
90
|
+
<!-- Prefetch other logo variants -->
|
|
91
|
+
<link rel="prefetch" as="image" href="/img/logo_icon.png" />
|
|
92
|
+
<link rel="prefetch" as="image" href="/img/logo_icon_2.png" />
|
|
93
|
+
|
|
94
|
+
<!-- Prefetch PWA resources -->
|
|
95
|
+
<link rel="prefetch" as="script" href="/sw.js" />
|
|
96
|
+
|
|
97
|
+
<!-- Preload critical PWA manifest -->
|
|
98
|
+
<link rel="preload" as="fetch" href="/manifest.json" crossorigin />
|
|
99
|
+
<link rel="manifest" href="/manifest.json" />
|
|
100
|
+
<meta name="theme-color" content="rgba(28, 28, 49, 1)" />
|
|
101
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
102
|
+
|
|
103
|
+
<!-- Prism.js for syntax highlighting -->
|
|
104
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" />
|
|
105
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
|
106
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
|
107
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-json.min.js"></script>
|
|
108
|
+
</head>
|
|
109
|
+
|
|
110
|
+
<body class="w-full">
|
|
111
|
+
<div id="app"></div>
|
|
112
|
+
<script type="module" src="/src/main.js"></script>
|
|
113
|
+
</body>
|
|
114
|
+
</html>
|
package/index.js
ADDED
package/jsconfig.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
"paths": {
|
|
5
|
+
"@/*": ["src/*"]
|
|
6
|
+
},
|
|
7
|
+
"allowJs": true,
|
|
8
|
+
"checkJs": false,
|
|
9
|
+
"module": "ESNext",
|
|
10
|
+
"moduleResolution": "node",
|
|
11
|
+
"target": "ESNext",
|
|
12
|
+
"jsx": "preserve"
|
|
13
|
+
},
|
|
14
|
+
"exclude": ["node_modules", "dist"],
|
|
15
|
+
"include": ["src/**/*"]
|
|
16
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@necrolab/dashboard",
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"build": "rm -rf dist && vite build && npx workbox-cli generateSW workbox-config.js",
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"bot": "vite",
|
|
8
|
+
"expose": "vite --host 0.0.0.0",
|
|
9
|
+
"postinstall": "node postinstall.js",
|
|
10
|
+
"updaterenderer": "npm i @necrolab/tm-renderer@latest",
|
|
11
|
+
"preview": "vite preview",
|
|
12
|
+
"lint": "npx eslint src/ --fix"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@faker-js/faker": "^7.6.0",
|
|
16
|
+
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
17
|
+
"@necrolab/tm-renderer": "^0.1.4",
|
|
18
|
+
"@vitejs/plugin-vue": "^5.2.1",
|
|
19
|
+
"@vueuse/core": "^11.3.0",
|
|
20
|
+
"autoprefixer": "^10.4.21",
|
|
21
|
+
"caniuse-lite": "^1.0.30001692",
|
|
22
|
+
"cookie-parser": "^1.4.7",
|
|
23
|
+
"cors": "^2.8.5",
|
|
24
|
+
"dragselect": "^3.1.1",
|
|
25
|
+
"express": "^4.21.2",
|
|
26
|
+
"express-ws": "^5.0.2",
|
|
27
|
+
"pinia": "^2.3.0",
|
|
28
|
+
"postcss": "^8.4.49",
|
|
29
|
+
"register-service-worker": "^1.7.2",
|
|
30
|
+
"sass": "^1.83.0",
|
|
31
|
+
"tailwindcss": "^3.4.17",
|
|
32
|
+
"vite": "^6.3.5",
|
|
33
|
+
"vue": "^3.5.14",
|
|
34
|
+
"vue-router": "^4.5.0",
|
|
35
|
+
"vue-smoothie": "^1.2.0",
|
|
36
|
+
"vue-virtual-scroller": "^2.0.0-beta.8",
|
|
37
|
+
"vue3-toastify": "^0.0.4",
|
|
38
|
+
"vuedraggable": "^4.1.0",
|
|
39
|
+
"websocket-heartbeat-js": "^1.1.3"
|
|
40
|
+
},
|
|
41
|
+
"main": "index.js",
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@vue/cli-plugin-pwa": "^5.0.8",
|
|
44
|
+
"eslint": "^9.17.0",
|
|
45
|
+
"eslint-plugin-vue": "^9.32.0",
|
|
46
|
+
"workbox-cli": "^7.3.0"
|
|
47
|
+
}
|
|
48
|
+
}
|
package/postinstall.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const { execSync } = require("node:child_process");
|
|
2
|
+
const fs = require("node:fs");
|
|
3
|
+
const path = require("node:path");
|
|
4
|
+
|
|
5
|
+
const vitePath = path.resolve(path.join(__dirname, "/node_modules/vite/bin/vite.js"));
|
|
6
|
+
if (fs.existsSync(vitePath)) execSync(`node "${vitePath}" build`, { cwd: __dirname, stdio: "inherit" });
|
|
7
|
+
|
|
8
|
+
const distPath = path.resolve(path.join(__dirname, "/dist/"));
|
|
9
|
+
if (fs.existsSync(distPath)) fs.rmSync(distPath, { recursive: true });
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#a2001d" d="M0 0h167l52.3 252L167 512H0z"/><path fill="#eee" d="m167 167 170.8-44.6L512 167v178l-173.2 36.9L167 345z"/><path fill="#6da544" d="M167 0h345v167H167z"/><path fill="#333" d="M167 345h345v167H167z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#d80027" d="M0 0h512v167l-23.2 89.7L512 345v167H0V345l29.4-89L0 167z"/><path fill="#eee" d="M0 167h512v178H0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#0052b4" d="M0 0h512v512H0z"/><path fill="#eee" d="m154 300 14 30 32-8-14 30 25 20-32 7 1 33-26-21-26 21 1-33-33-7 26-20-14-30 32 8zm222-27h47l-38 27 15-44 14 44zm7-162 7 15 16-4-7 15 12 10-15 3v17l-13-11-13 11v-17l-15-3 12-10-7-15 16 4zm57 67 7 15 16-4-7 15 12 10-15 3v16l-13-10-13 11v-17l-15-3 12-10-7-15 16 4zm-122 22 7 15 16-4-7 15 12 10-15 3v16l-13-10-13 11v-17l-15-3 12-10-7-15 16 4zm65 156 7 15 16-4-7 15 12 10-15 3v17l-13-11-13 11v-17l-15-3 12-10-7-15 16 4zM0 0v32l32 32L0 96v160h32l32-32 32 32h32v-83l83 83h45l-8-16 8-15v-14l-83-83h83V96l-32-32 32-32V0H96L64 32 32 0Z"/><path fill="#d80027" d="M32 0v32H0v64h32v160h64V96h160V32H96V0Zm96 128 128 128v-31l-97-97z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#333" d="M0 0h167l38.2 252.6L167 512H0z"/><path fill="#d80027" d="M345 0h167v512H345l-36.7-256z"/><path fill="#ffda44" d="M167 0h178v512H167z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#d80027" d="M0 0h512v512H0z"/><path fill="#eee" d="M389.6 211.5h-89v-89h-89.1v89h-89v89h89v89h89v-89h89z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#eee" d="M0 0h512v256l-265 45.2z"/><path fill="#d80027" d="M210 256h302v256H0z"/><path fill="#0052b4" d="M0 0v512l256-256L0 0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#ffda44" d="m0 345 256.7-25.5L512 345v167H0z"/><path fill="#d80027" d="m0 167 255-23 257 23v178H0z"/><path fill="#333" d="M0 0h512v167H0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#d80027" d="M0 0h133.6l32.7 20.3 34-20.3H512v222.6L491.4 256l20.6 33.4V512H200.3l-31.7-20.4-35 20.4H0V289.4l29.4-33L0 222.7z"/><path fill="#eee" d="M133.6 0v222.6H0v66.8h133.6V512h66.7V289.4H512v-66.8H200.3V0h-66.7z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#ffda44" d="m0 128 256-32 256 32v256l-256 32L0 384Z"/><path fill="#d80027" d="M0 0h512v128H0zm0 384h512v128H0z"/><g fill="#eee"><path d="M144 304h-16v-80h16zm128 0h16v-80h-16z"/><ellipse cx="208" cy="296" rx="48" ry="32"/></g><g fill="#d80027"><rect width="16" height="24" x="128" y="192" rx="8"/><rect width="16" height="24" x="272" y="192" rx="8"/><path d="M208 272v24a24 24 0 0 0 24 24 24 24 0 0 0 24-24v-24h-24z"/></g><rect width="32" height="16" x="120" y="208" fill="#ff9811" ry="8"/><rect width="32" height="16" x="264" y="208" fill="#ff9811" ry="8"/><rect width="32" height="16" x="120" y="304" fill="#ff9811" rx="8"/><rect width="32" height="16" x="264" y="304" fill="#ff9811" rx="8"/><path fill="#ff9811" d="M160 272v24c0 8 4 14 9 19l5-6 5 10a21 21 0 0 0 10 0l5-10 5 6c6-5 9-11 9-19v-24h-9l-5 8-5-8h-10l-5 8-5-8z"/><path d="M122 252h172m-172 24h28m116 0h28"/><path fill="#d80027" d="M122 248a4 4 0 0 0-4 4 4 4 0 0 0 4 4h172a4 4 0 0 0 4-4 4 4 0 0 0-4-4zm0 24a4 4 0 0 0-4 4 4 4 0 0 0 4 4h28a4 4 0 0 0 4-4 4 4 0 0 0-4-4zm144 0a4 4 0 0 0-4 4 4 4 0 0 0 4 4h28a4 4 0 0 0 4-4 4 4 0 0 0-4-4z"/><path fill="#eee" d="M196 168c-7 0-13 5-15 11l-5-1c-9 0-16 7-16 16s7 16 16 16c7 0 13-4 15-11a16 16 0 0 0 17-4 16 16 0 0 0 17 4 16 16 0 1 0 10-20 16 16 0 0 0-27-5c-3-4-7-6-12-6zm0 8c5 0 8 4 8 8 0 5-3 8-8 8-4 0-8-3-8-8 0-4 4-8 8-8zm24 0c5 0 8 4 8 8 0 5-3 8-8 8-4 0-8-3-8-8 0-4 4-8 8-8zm-44 10 4 1 4 8c0 4-4 7-8 7s-8-3-8-8c0-4 4-8 8-8zm64 0c5 0 8 4 8 8 0 5-3 8-8 8-4 0-8-3-8-7l4-8z"/><path fill="none" d="M220 284v12c0 7 5 12 12 12s12-5 12-12v-12z"/><path fill="#ff9811" d="M200 160h16v32h-16z"/><path fill="#eee" d="M208 224h48v48h-48z"/><path fill="#d80027" d="m248 208-8 8h-64l-8-8c0-13 18-24 40-24s40 11 40 24zm-88 16h48v48h-48z"/><rect width="20" height="32" x="222" y="232" fill="#d80027" rx="10" ry="10"/><path fill="#ff9811" d="M168 232v8h8v16h-8v8h32v-8h-8v-16h8v-8zm8-16h64v8h-64z"/><g fill="#ffda44"><circle cx="186" cy="202" r="6"/><circle cx="208" cy="202" r="6"/><circle cx="230" cy="202" r="6"/></g><path fill="#d80027" d="M169 272v43a24 24 0 0 0 10 4v-47h-10zm20 0v47a24 24 0 0 0 10-4v-43h-10z"/><g fill="#338af3"><circle cx="208" cy="272" r="16"/><rect width="32" height="16" x="264" y="320" ry="8"/><rect width="32" height="16" x="120" y="320" ry="8"/></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#eee" d="m0 167 253.8-19.3L512 167v178l-254.9 32.3L0 345z"/><path fill="#a2001d" d="M0 0h512v167H0z"/><path fill="#0052b4" d="M0 345h512v167H0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#d80027" d="M0 0h100.2l66.1 53.5L233.7 0H512v189.3L466.3 257l45.7 65.8V512H233.7l-68-50.7-65.5 50.7H0V322.8l51.4-68.5-51.4-65z"/><path fill="#eee" d="M100.2 0v189.3H0v33.4l24.6 33L0 289.5v33.4h100.2V512h33.4l30.6-26.3 36.1 26.3h33.4V322.8H512v-33.4l-24.6-33.7 24.6-33v-33.4H233.7V0h-33.4l-33.8 25.3L133.6 0z"/><path fill="#0052b4" d="M133.6 0v222.7H0v66.7h133.6V512h66.7V289.4H512v-66.7H200.3V0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#0052b4" d="M256 0h256v512H0V256Z"/><path fill="#eee" d="M0 0v32l32 32L0 96v160h32l32-32 32 32h32v-83l83 83h45l-8-16 8-15v-14l-83-83h83V96l-32-32 32-32V0H96L64 32 32 0Zm382 92-11 35h-37l30 21-12 35 30-22 30 22-12-35 30-21h-37l-11-35Zm61 72-11 35h-37l30 21-11 35 29-21 30 21-12-35 30-21h-37Zm-123 10-11 35h-37l30 22-11 35 29-22 30 22-11-35 29-22h-36zm59 130-11 35h-37l30 21-11 35 29-21 30 21-11-35 29-21h-36z"/><path fill="#d80027" d="M32 0v32H0v64h32v160h64V96h160V32H96V0Zm96 128 128 128v-31l-97-97zm251 201-5 18h-19l15 10-6 18 15-11 15 11-5-18 14-10h-18Zm-59-129-5 17h-19l15 11-6 17 15-11 15 11-6-17 15-11h-18l-6-17zm123-11-6 18h-18l15 11-6 17 15-11 15 11-6-17 15-11h-18l-6-18zm-61-72-6 17h-18l15 11-6 17 15-10 15 10-6-17 15-11h-18z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#d80027" d="m0 256 256.4-44.3L512 256v256H0z"/><path fill="#eee" d="M0 0h512v256H0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#0052b4" d="M0 0h133.6l35.3 16.7L200.3 0H512v222.6l-22.6 31.7 22.6 35.1V512H200.3l-32-19.8-34.7 19.8H0V289.4l22.1-33.3L0 222.6z"/><path fill="#ffda44" d="M133.6 0v222.6H0v66.8h133.6V512h66.7V289.4H512v-66.8H200.3V0z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#eee" d="m0 0 8 22-8 23v23l32 54-32 54v32l32 48-32 48v32l32 54-32 54v68l22-8 23 8h23l54-32 54 32h32l48-32 48 32h32l54-32 54 32h68l-8-22 8-23v-23l-32-54 32-54v-32l-32-48 32-48v-32l-32-54 32-54V0l-22 8-23-8h-23l-54 32-54-32h-32l-48 32-48-32h-32l-54 32L68 0H0z"/><path fill="#0052b4" d="M336 0v108L444 0Zm176 68L404 176h108zM0 176h108L0 68ZM68 0l108 108V0Zm108 512V404L68 512ZM0 444l108-108H0Zm512-108H404l108 108Zm-68 176L336 404v108z"/><path fill="#d80027" d="M0 0v45l131 131h45L0 0zm208 0v208H0v96h208v208h96V304h208v-96H304V0h-96zm259 0L336 131v45L512 0h-45zM176 336 0 512h45l131-131v-45zm160 0 176 176v-45L381 336h-45z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><mask id="a"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a)"><path fill="#eee" d="M256 0h256v64l-32 32 32 32v64l-32 32 32 32v64l-32 32 32 32v64l-256 32L0 448v-64l32-32-32-32v-64z"/><path fill="#d80027" d="M224 64h288v64H224Zm0 128h288v64H256ZM0 320h512v64H0Zm0 128h512v64H0Z"/><path fill="#0052b4" d="M0 0h256v256H0Z"/><path fill="#eee" d="m187 243 57-41h-70l57 41-22-67zm-81 0 57-41H93l57 41-22-67zm-81 0 57-41H12l57 41-22-67zm162-81 57-41h-70l57 41-22-67zm-81 0 57-41H93l57 41-22-67zm-81 0 57-41H12l57 41-22-67Zm162-82 57-41h-70l57 41-22-67Zm-81 0 57-41H93l57 41-22-67zm-81 0 57-41H12l57 41-22-67Z"/></g></svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="8" height="16" viewBox="0 0 8 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M0.25 0.5H7.75V6.3875C7.75 6.675 7.6875 6.93125 7.5625 7.15625C7.4375 7.38125 7.2625 7.5625 7.0375 7.7L4.375 9.275L4.9 11H7.75L5.425 12.65L6.325 15.5L4 13.7375L1.675 15.5L2.575 12.65L0.25 11H3.1L3.625 9.275L0.9625 7.7C0.7375 7.5625 0.5625 7.38125 0.4375 7.15625C0.3125 6.93125 0.25 6.675 0.25 6.3875V0.5ZM1.75 2V6.3875L3.25 7.2875V2H1.75ZM6.25 2H4.75V7.2875L6.25 6.3875V2Z" fill="white"/>
|
|
3
|
+
</svg>
|