@necrolab/dashboard 0.4.221 → 0.5.2
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/.prettierrc +27 -1
- package/.vscode/extensions.json +1 -1
- package/README.md +64 -2
- package/artwork/image.png +0 -0
- package/backend/api.js +26 -24
- package/backend/auth.js +2 -2
- package/backend/batching.js +1 -1
- package/backend/endpoints.js +8 -11
- package/backend/index.js +2 -2
- package/backend/mock-data.js +27 -36
- package/backend/mock-src/classes/logger.js +5 -7
- package/backend/mock-src/classes/utils.js +3 -2
- package/backend/mock-src/ticketmaster.js +4 -4
- package/backend/validator.js +2 -2
- package/config/configs.json +0 -1
- package/dev-server.js +134 -0
- package/exit +209 -0
- package/index.html +80 -8
- package/index.js +1 -1
- package/jsconfig.json +16 -0
- package/package.json +39 -25
- package/postcss.config.js +1 -1
- package/postinstall.js +124 -20
- 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/img/logo_trans.png +0 -0
- package/public/img/necro_logo.png +0 -0
- package/public/manifest.json +16 -10
- package/public/reconnect-logo.png +0 -0
- package/run +176 -9
- package/src/App.vue +498 -85
- package/src/assets/css/base/reset.scss +43 -0
- package/src/assets/css/base/scroll.scss +114 -0
- package/src/assets/css/base/typography.scss +37 -0
- package/src/assets/css/components/buttons.scss +216 -0
- package/src/assets/css/components/forms.scss +221 -0
- package/src/assets/css/components/modals.scss +13 -0
- package/src/assets/css/components/tables.scss +27 -0
- package/src/assets/css/components/toasts.scss +100 -0
- package/src/assets/css/main.scss +202 -122
- package/src/assets/img/background.svg +2 -2
- package/src/assets/img/background.svg.backup +11 -0
- package/src/assets/img/logo_trans.png +0 -0
- package/src/components/Auth/LoginForm.vue +95 -11
- package/src/components/Editors/Account/Account.vue +116 -40
- package/src/components/Editors/Account/AccountCreator.vue +88 -39
- package/src/components/Editors/Account/AccountView.vue +102 -34
- package/src/components/Editors/Account/CreateAccount.vue +80 -32
- package/src/components/Editors/Profile/CreateProfile.vue +269 -83
- package/src/components/Editors/Profile/Profile.vue +132 -47
- package/src/components/Editors/Profile/ProfileCountryChooser.vue +82 -20
- package/src/components/Editors/Profile/ProfileView.vue +89 -32
- package/src/components/Editors/TagLabel.vue +67 -6
- package/src/components/Editors/TagToggle.vue +7 -2
- package/src/components/Filter/Filter.vue +288 -71
- package/src/components/Filter/FilterPreview.vue +202 -31
- package/src/components/Filter/PriceSortToggle.vue +76 -6
- package/src/components/Table/Header.vue +1 -1
- package/src/components/Table/Row.vue +1 -1
- package/src/components/Table/Table.vue +19 -2
- package/src/components/Tasks/CheckStock.vue +6 -8
- package/src/components/Tasks/Controls/DesktopControls.vue +27 -17
- package/src/components/Tasks/Controls/MobileControls.vue +8 -45
- package/src/components/Tasks/CreateTaskAXS.vue +80 -72
- package/src/components/Tasks/CreateTaskTM.vue +95 -141
- package/src/components/Tasks/MassEdit.vue +4 -6
- package/src/components/Tasks/QuickSettings.vue +199 -30
- package/src/components/Tasks/ScrapeVenue.vue +5 -6
- package/src/components/Tasks/Stats.vue +50 -24
- package/src/components/Tasks/Task.vue +384 -179
- package/src/components/Tasks/TaskLabel.vue +2 -2
- package/src/components/Tasks/TaskView.vue +136 -48
- package/src/components/Tasks/Utilities.vue +25 -10
- package/src/components/Tasks/ViewTask.vue +321 -0
- package/src/components/icons/Bag.vue +1 -1
- package/src/components/icons/Check.vue +5 -0
- package/src/components/icons/Close.vue +21 -0
- package/src/components/icons/CloseX.vue +5 -0
- package/src/components/icons/Eye.vue +6 -0
- package/src/components/icons/Key.vue +21 -0
- package/src/components/icons/Loyalty.vue +1 -1
- package/src/components/icons/Mail.vue +2 -2
- package/src/components/icons/Pencil.vue +21 -0
- package/src/components/icons/Play.vue +2 -2
- package/src/components/icons/Profile.vue +18 -0
- package/src/components/icons/Reload.vue +4 -5
- package/src/components/icons/Sandclock.vue +2 -2
- package/src/components/icons/Sell.vue +21 -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 +1 -1
- package/src/components/icons/Wildcard.vue +18 -0
- package/src/components/icons/index.js +26 -1
- package/src/components/ui/Modal.vue +107 -13
- package/src/components/ui/Navbar.vue +175 -40
- package/src/components/ui/ReconnectIndicator.vue +351 -55
- package/src/components/ui/Splash.vue +5 -35
- package/src/components/ui/controls/CountryChooser.vue +200 -62
- package/src/components/ui/controls/atomic/Checkbox.vue +119 -10
- package/src/components/ui/controls/atomic/Dropdown.vue +216 -39
- package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
- package/src/components/ui/controls/atomic/MultiDropdown.vue +300 -37
- package/src/components/ui/controls/atomic/Switch.vue +53 -25
- package/src/composables/useClickOutside.js +21 -0
- package/src/composables/useDropdownPosition.js +174 -0
- package/src/libs/Filter.js +60 -24
- package/src/registerServiceWorker.js +1 -1
- package/src/stores/connection.js +4 -4
- package/src/stores/sampleData.js +172 -199
- package/src/stores/ui.js +55 -20
- package/src/stores/utils.js +30 -4
- package/src/types/index.js +41 -0
- package/src/utils/debug.js +1 -0
- package/src/views/Accounts.vue +116 -50
- package/src/views/Console.vue +394 -77
- package/src/views/Editor.vue +1176 -123
- package/src/views/FilterBuilder.vue +528 -250
- package/src/views/Login.vue +75 -14
- package/src/views/Profiles.vue +119 -34
- package/src/views/Tasks.vue +266 -98
- package/static/offline.html +192 -50
- package/switch-branch.sh +41 -0
- package/tailwind.config.js +119 -27
- package/vite.config.js +73 -16
- package/workbox-config.cjs +63 -0
- package/ICONS.md +0 -21
- package/public/img/background.svg +0 -14
- 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/src/assets/css/_input.scss +0 -143
- 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/vue.config.js +0 -32
- package/workbox-config.js +0 -7
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="navbar" :class="{ 'force-z': menuOpen }">
|
|
3
|
-
<div :class="
|
|
3
|
+
<div :class="['component-container ios-wrapper flex items-center relative', { 'ios-wrapper': landscapeIos }]">
|
|
4
4
|
<!-- Brand -->
|
|
5
|
-
<!-- <h3 class="font-bold text-white mr-4 z-30">Necro Lab</h3> -->
|
|
6
5
|
<img src="@/assets/img/logo_trans.png" class="h-6 lg:h-8 mr-4 z-30 object-cover" alt="Logo: Necro" />
|
|
7
6
|
<!-- Navlinks -->
|
|
8
7
|
<ul class="hidden lg:flex">
|
|
@@ -16,18 +15,16 @@
|
|
|
16
15
|
<router-link to="/console"><ConsoleIcon /><span class="hidden xl:block">Console</span></router-link>
|
|
17
16
|
</li>
|
|
18
17
|
<li>
|
|
19
|
-
<router-link to="/profiles"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
>
|
|
18
|
+
<router-link to="/profiles">
|
|
19
|
+
<GroupIcon class="xl:mr-2" />
|
|
20
|
+
<span class="hidden xl:block">Profiles</span>
|
|
21
|
+
</router-link>
|
|
24
22
|
</li>
|
|
25
23
|
<li>
|
|
26
|
-
<router-link to="/accounts"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
>
|
|
24
|
+
<router-link to="/accounts">
|
|
25
|
+
<MailIcon class="xl:mr-2" />
|
|
26
|
+
<span class="hidden xl:block">Accounts</span>
|
|
27
|
+
</router-link>
|
|
31
28
|
</li>
|
|
32
29
|
<li>
|
|
33
30
|
<router-link to="/filter"><FilterIcon /><span class="hidden xl:block">Filter</span></router-link>
|
|
@@ -45,7 +42,6 @@
|
|
|
45
42
|
<h4 v-else class="hidden lg:block text-white text-sm font-medium">
|
|
46
43
|
<span class="text-lightgray">Loading </span>
|
|
47
44
|
</h4>
|
|
48
|
-
<!-- <div class="hidden lg:block w-10 h-10 rounded-full bg-dark-400"></div> -->
|
|
49
45
|
<img
|
|
50
46
|
v-if="ui.profile?.profilePicture"
|
|
51
47
|
:src="ui.profile?.profilePicture"
|
|
@@ -76,10 +72,16 @@
|
|
|
76
72
|
<router-link to="/console"><ConsoleIcon />Console</router-link>
|
|
77
73
|
</li>
|
|
78
74
|
<li @click="toggleMenu">
|
|
79
|
-
<router-link to="/profiles"
|
|
75
|
+
<router-link to="/profiles">
|
|
76
|
+
<GroupIcon class="mr-2" />
|
|
77
|
+
Profiles
|
|
78
|
+
</router-link>
|
|
80
79
|
</li>
|
|
81
80
|
<li @click="toggleMenu">
|
|
82
|
-
<router-link to="/accounts"
|
|
81
|
+
<router-link to="/accounts">
|
|
82
|
+
<MailIcon class="mr-2" />
|
|
83
|
+
Accounts
|
|
84
|
+
</router-link>
|
|
83
85
|
</li>
|
|
84
86
|
<li @click="toggleMenu">
|
|
85
87
|
<router-link to="/filter"><FilterIcon />Filter</router-link>
|
|
@@ -95,17 +97,18 @@
|
|
|
95
97
|
<span class="text-lightgray">Logged in as </span>
|
|
96
98
|
<span class="font-black"> {{ ui.profile?.name }}</span>
|
|
97
99
|
</h4>
|
|
98
|
-
<!-- <div class="w-10 h-10 rounded-full bg-light-300"></div> -->
|
|
99
100
|
<img :src="ui.profile?.profilePicture" alt="" class="h-10 w-10 rounded-full" />
|
|
100
101
|
</div>
|
|
101
102
|
|
|
102
|
-
<div class="mx-auto mt-6 mb-14 flex gap-3">
|
|
103
|
-
<
|
|
104
|
-
>Dashboard
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
<div class="mx-auto mt-6 mb-14 flex gap-3 items-center">
|
|
104
|
+
<div class="version-badge">
|
|
105
|
+
<span class="version-label">Dashboard</span>
|
|
106
|
+
<span class="version-number">v{{ dashVersion }}</span>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="version-badge">
|
|
109
|
+
<span class="version-label">Bot</span>
|
|
110
|
+
<span class="version-number">v{{ ui.botVersion }}</span>
|
|
111
|
+
</div>
|
|
109
112
|
</div>
|
|
110
113
|
</div>
|
|
111
114
|
</transition>
|
|
@@ -115,48 +118,180 @@
|
|
|
115
118
|
.navbar {
|
|
116
119
|
@apply border-b py-5 fixed w-full;
|
|
117
120
|
top: 0;
|
|
118
|
-
|
|
121
|
+
left: 0;
|
|
122
|
+
z-index: 1000;
|
|
123
|
+
background: oklch(0.1822 0 0 / 0.95);
|
|
119
124
|
backdrop-filter: blur(23px);
|
|
120
|
-
|
|
125
|
+
-webkit-backdrop-filter: blur(23px);
|
|
126
|
+
border-color: oklch(0.26 0 0);
|
|
127
|
+
|
|
128
|
+
// Consistent padding base
|
|
129
|
+
padding-top: 1.25rem;
|
|
130
|
+
padding-bottom: 1.25rem;
|
|
131
|
+
|
|
132
|
+
// Only add safe area top padding for portrait notch devices
|
|
133
|
+
@supports (padding-top: env(safe-area-inset-top)) {
|
|
134
|
+
@media (max-device-width: 430px) and (orientation: portrait) {
|
|
135
|
+
padding-top: max(1.25rem, env(safe-area-inset-top));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Extend background above viewport for notch area with theme gradient
|
|
140
|
+
&::before {
|
|
141
|
+
content: "";
|
|
142
|
+
position: absolute;
|
|
143
|
+
top: -100px;
|
|
144
|
+
left: 0;
|
|
145
|
+
right: 0;
|
|
146
|
+
height: 100px;
|
|
147
|
+
background: oklch(0.1822 0 0);
|
|
148
|
+
backdrop-filter: blur(8px);
|
|
149
|
+
-webkit-backdrop-filter: blur(8px);
|
|
150
|
+
z-index: -1;
|
|
151
|
+
}
|
|
152
|
+
|
|
121
153
|
ul {
|
|
122
154
|
@apply gap-x-4;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
155
|
+
|
|
156
|
+
// Global SVG normalization - force all icons to be identical
|
|
157
|
+
svg {
|
|
158
|
+
width: 20px !important;
|
|
159
|
+
height: 20px !important;
|
|
160
|
+
display: block !important;
|
|
161
|
+
flex-shrink: 0 !important;
|
|
162
|
+
box-sizing: border-box !important;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
li a {
|
|
166
|
+
@apply flex text-white text-sm items-center rounded-lg;
|
|
167
|
+
height: 40px;
|
|
168
|
+
border: 1px solid transparent;
|
|
169
|
+
border-left: 3px solid transparent;
|
|
170
|
+
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
171
|
+
position: relative;
|
|
172
|
+
|
|
173
|
+
svg {
|
|
174
|
+
@apply mr-2;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&.router-link-exact-active {
|
|
178
|
+
border-bottom: 2px solid oklch(0.72 0.15 145);
|
|
179
|
+
color: oklch(0.72 0.15 145);
|
|
180
|
+
background: oklch(0.72 0.15 145 / 0.08);
|
|
181
|
+
margin-bottom: -2px;
|
|
182
|
+
|
|
183
|
+
// Mobile styling
|
|
184
|
+
@media (max-width: 1023px) {
|
|
185
|
+
border: 2px solid oklch(0.72 0.15 145);
|
|
186
|
+
color: oklch(0.72 0.15 145);
|
|
187
|
+
background: oklch(0.72 0.15 145 / 0.08);
|
|
188
|
+
padding: 0.5rem 0.75rem;
|
|
189
|
+
border-radius: 0.5rem;
|
|
190
|
+
margin-bottom: 0;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Desktop mode (lg to xl): icon-only view with perfect centering
|
|
196
|
+
@media (min-width: 1024px) and (max-width: 1279px) {
|
|
197
|
+
li a {
|
|
198
|
+
width: 40px;
|
|
199
|
+
height: 40px;
|
|
200
|
+
padding: 0 !important;
|
|
201
|
+
display: flex !important;
|
|
202
|
+
align-items: center !important;
|
|
203
|
+
justify-content: center !important;
|
|
204
|
+
position: relative;
|
|
205
|
+
|
|
206
|
+
// Hide text completely in icon-only mode
|
|
207
|
+
span {
|
|
208
|
+
display: none !important;
|
|
209
|
+
}
|
|
210
|
+
|
|
126
211
|
svg {
|
|
127
|
-
|
|
212
|
+
margin: 0 !important;
|
|
213
|
+
padding: 0 !important;
|
|
214
|
+
position: absolute;
|
|
215
|
+
top: 50%;
|
|
216
|
+
left: 50%;
|
|
217
|
+
transform: translate(-50%, -50%);
|
|
128
218
|
}
|
|
219
|
+
|
|
129
220
|
&.router-link-exact-active {
|
|
130
|
-
|
|
221
|
+
border: 2px solid oklch(0.72 0.15 145) !important;
|
|
222
|
+
color: oklch(0.72 0.15 145) !important;
|
|
223
|
+
background: oklch(0.72 0.15 145 / 0.08) !important;
|
|
224
|
+
border-radius: 0.5rem !important;
|
|
225
|
+
width: 40px !important;
|
|
226
|
+
height: 40px !important;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// XL and above: full width with text
|
|
232
|
+
@media (min-width: 1280px) {
|
|
233
|
+
li a {
|
|
234
|
+
@apply px-4;
|
|
235
|
+
height: 40px;
|
|
236
|
+
|
|
237
|
+
svg {
|
|
238
|
+
@apply mr-2;
|
|
131
239
|
}
|
|
132
240
|
}
|
|
133
241
|
}
|
|
134
242
|
}
|
|
135
243
|
}
|
|
244
|
+
|
|
136
245
|
.force-z {
|
|
137
246
|
z-index: 20000;
|
|
138
247
|
}
|
|
248
|
+
|
|
139
249
|
.mobile-menu {
|
|
140
|
-
margin-top:
|
|
141
|
-
height:
|
|
250
|
+
margin-top: 0;
|
|
251
|
+
height: 100vh;
|
|
252
|
+
height: 100dvh; // Dynamic viewport height for mobile
|
|
142
253
|
will-change: transform, opacity, filter;
|
|
254
|
+
@apply bg-dark-400 fixed inset-0 pt-20 pb-8 w-full z-10;
|
|
143
255
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
font-size: 20px !important;
|
|
150
|
-
}
|
|
256
|
+
ul li {
|
|
257
|
+
@apply mb-4 mx-auto;
|
|
258
|
+
|
|
259
|
+
a {
|
|
260
|
+
font-size: 20px !important;
|
|
151
261
|
}
|
|
152
262
|
}
|
|
153
263
|
}
|
|
264
|
+
|
|
265
|
+
.version-badge {
|
|
266
|
+
@apply flex items-center gap-x-2 px-3 py-2 rounded-lg border;
|
|
267
|
+
background: oklch(0.2046 0 0);
|
|
268
|
+
border-color: oklch(0.2809 0 0);
|
|
269
|
+
|
|
270
|
+
.version-label {
|
|
271
|
+
@apply text-xs font-medium;
|
|
272
|
+
color: oklch(0.65 0 0);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.version-number {
|
|
276
|
+
@apply text-xs font-bold;
|
|
277
|
+
color: oklch(0.72 0.15 145);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
154
280
|
</style>
|
|
155
281
|
|
|
156
282
|
<script setup>
|
|
157
283
|
import { storeToRefs } from "pinia";
|
|
158
284
|
import { ref } from "vue";
|
|
159
|
-
import {
|
|
285
|
+
import {
|
|
286
|
+
EditIcon,
|
|
287
|
+
ConsoleIcon,
|
|
288
|
+
TasksIcon,
|
|
289
|
+
LogoutIcon,
|
|
290
|
+
MenuIcon,
|
|
291
|
+
FilterIcon,
|
|
292
|
+
GroupIcon,
|
|
293
|
+
MailIcon
|
|
294
|
+
} from "@/components/icons";
|
|
160
295
|
import { useUIStore } from "@/stores/ui";
|
|
161
296
|
import router from "@/router/index";
|
|
162
297
|
import CountryChooser from "@/components/ui/controls/CountryChooser.vue";
|