@necrolab/dashboard 0.4.61 → 0.4.209

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.
Files changed (133) hide show
  1. package/.prettierrc +1 -27
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +2 -64
  4. package/backend/api.js +48 -40
  5. package/backend/auth.js +3 -3
  6. package/backend/batching.js +1 -1
  7. package/backend/endpoints.js +76 -12
  8. package/backend/index.js +2 -2
  9. package/backend/mock-data.js +36 -27
  10. package/backend/mock-src/classes/logger.js +8 -8
  11. package/backend/mock-src/classes/utils.js +3 -7
  12. package/backend/mock-src/database.js +0 -0
  13. package/backend/mock-src/ticketmaster.js +79 -79
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +3 -2
  16. package/config/filter.json +3 -2
  17. package/index.html +8 -79
  18. package/index.js +1 -1
  19. package/package.json +25 -40
  20. package/postcss.config.js +1 -1
  21. package/postinstall.js +17 -98
  22. package/public/android-chrome-192x192.png +0 -0
  23. package/public/android-chrome-512x512.png +0 -0
  24. package/public/apple-touch-icon.png +0 -0
  25. package/public/favicon-16x16.png +0 -0
  26. package/public/favicon-32x32.png +0 -0
  27. package/public/favicon.ico +0 -0
  28. package/public/manifest.json +7 -12
  29. package/public/sw.js +2 -0
  30. package/public/workbox-49fdaf31.js +2 -0
  31. package/public/workbox-49fdaf31.js.map +1 -0
  32. package/public/workbox-88575b92.js +2 -0
  33. package/public/workbox-88575b92.js.map +1 -0
  34. package/public/workbox-a67a7b11.js +2 -0
  35. package/public/workbox-a67a7b11.js.map +1 -0
  36. package/public/workbox-d4314735.js +2 -0
  37. package/public/workbox-d4314735.js.map +1 -0
  38. package/public/workbox-e0f89ef3.js +2 -0
  39. package/public/workbox-e0f89ef3.js.map +1 -0
  40. package/run +9 -176
  41. package/src/App.vue +85 -498
  42. package/src/assets/css/_input.scss +99 -144
  43. package/src/assets/css/main.scss +99 -450
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/logo_icon.png +0 -0
  46. package/src/components/Auth/LoginForm.vue +11 -62
  47. package/src/components/Editors/Account/Account.vue +40 -116
  48. package/src/components/Editors/Account/AccountCreator.vue +39 -88
  49. package/src/components/Editors/Account/AccountView.vue +34 -102
  50. package/src/components/Editors/Account/CreateAccount.vue +32 -80
  51. package/src/components/Editors/Profile/CreateProfile.vue +83 -269
  52. package/src/components/Editors/Profile/Profile.vue +47 -132
  53. package/src/components/Editors/Profile/ProfileCountryChooser.vue +20 -82
  54. package/src/components/Editors/Profile/ProfileView.vue +34 -91
  55. package/src/components/Editors/TagLabel.vue +6 -67
  56. package/src/components/Filter/Filter.vue +72 -289
  57. package/src/components/Filter/FilterPreview.vue +30 -171
  58. package/src/components/Filter/PriceSortToggle.vue +4 -74
  59. package/src/components/Table/Header.vue +1 -1
  60. package/src/components/Table/Row.vue +1 -1
  61. package/src/components/Table/Table.vue +2 -19
  62. package/src/components/Tasks/CheckStock.vue +13 -28
  63. package/src/components/Tasks/Controls/DesktopControls.vue +17 -17
  64. package/src/components/Tasks/Controls/MobileControls.vue +45 -8
  65. package/src/components/Tasks/CreateTaskAXS.vue +73 -79
  66. package/src/components/Tasks/CreateTaskTM.vue +142 -94
  67. package/src/components/Tasks/MassEdit.vue +7 -9
  68. package/src/components/Tasks/QuickSettings.vue +55 -169
  69. package/src/components/Tasks/ScrapeVenue.vue +4 -7
  70. package/src/components/Tasks/Stats.vue +23 -52
  71. package/src/components/Tasks/Task.vue +135 -377
  72. package/src/components/Tasks/TaskView.vue +47 -107
  73. package/src/components/Tasks/Utilities.vue +6 -5
  74. package/src/components/icons/Bag.vue +1 -1
  75. package/src/components/icons/Loyalty.vue +1 -1
  76. package/src/components/icons/Mail.vue +2 -2
  77. package/src/components/icons/Play.vue +2 -2
  78. package/src/components/icons/Reload.vue +5 -4
  79. package/src/components/icons/Sandclock.vue +2 -2
  80. package/src/components/icons/Stadium.vue +1 -1
  81. package/src/components/icons/index.js +1 -24
  82. package/src/components/ui/Modal.vue +13 -105
  83. package/src/components/ui/Navbar.vue +37 -170
  84. package/src/components/ui/ReconnectIndicator.vue +55 -351
  85. package/src/components/ui/Splash.vue +35 -5
  86. package/src/components/ui/controls/CountryChooser.vue +62 -200
  87. package/src/components/ui/controls/atomic/Checkbox.vue +10 -119
  88. package/src/components/ui/controls/atomic/Dropdown.vue +39 -208
  89. package/src/components/ui/controls/atomic/MultiDropdown.vue +37 -300
  90. package/src/libs/Filter.js +170 -200
  91. package/src/registerServiceWorker.js +1 -1
  92. package/src/stores/connection.js +53 -51
  93. package/src/stores/logger.js +3 -11
  94. package/src/stores/sampleData.js +201 -173
  95. package/src/stores/ui.js +44 -112
  96. package/src/stores/utils.js +6 -90
  97. package/src/views/Accounts.vue +35 -44
  98. package/src/views/Console.vue +90 -341
  99. package/src/views/Editor.vue +123 -1176
  100. package/src/views/FilterBuilder.vue +251 -607
  101. package/src/views/Login.vue +14 -76
  102. package/src/views/Profiles.vue +25 -44
  103. package/src/views/Tasks.vue +100 -187
  104. package/static/offline.html +50 -192
  105. package/tailwind.config.js +26 -104
  106. package/vite.config.js +16 -73
  107. package/vue.config.js +32 -0
  108. package/workbox-config.js +11 -0
  109. package/artwork/image.png +0 -0
  110. package/dev-server.js +0 -136
  111. package/exit +0 -209
  112. package/jsconfig.json +0 -16
  113. package/src/assets/css/_utilities.scss +0 -388
  114. package/src/assets/img/background.svg.backup +0 -11
  115. package/src/components/icons/Check.vue +0 -5
  116. package/src/components/icons/Close.vue +0 -21
  117. package/src/components/icons/CloseX.vue +0 -5
  118. package/src/components/icons/Key.vue +0 -21
  119. package/src/components/icons/Pencil.vue +0 -21
  120. package/src/components/icons/Profile.vue +0 -18
  121. package/src/components/icons/Sell.vue +0 -21
  122. package/src/components/icons/Spinner.vue +0 -42
  123. package/src/components/icons/SquareCheck.vue +0 -18
  124. package/src/components/icons/SquareUncheck.vue +0 -18
  125. package/src/components/icons/Wildcard.vue +0 -18
  126. package/src/components/ui/controls/atomic/LoadingButton.vue +0 -45
  127. package/src/composables/useClickOutside.js +0 -21
  128. package/src/composables/useDropdownPosition.js +0 -174
  129. package/src/types/index.js +0 -41
  130. package/src/utils/debug.js +0 -1
  131. package/switch-branch.sh +0 -41
  132. package/workbox-config.cjs +0 -63
  133. /package/src/assets/img/{logo_icon-old.png → logo_icon_2.png} +0 -0
@@ -1,98 +1,23 @@
1
1
  <template>
2
- <div class="reconnect-overlay">
3
- <transition name="background-fill" appear>
4
- <div class="background-layer"></div>
5
- </transition>
6
- <transition name="reconnect-content" appear>
7
- <div class="reconnect-container">
8
- <div class="loading-system">
9
- <!-- Geometric loading rings -->
10
- <div class="ring-system">
11
- <div class="ring ring-outer"></div>
12
- <div class="ring ring-middle"></div>
13
- <div class="ring ring-inner"></div>
14
- <!-- Central logo -->
15
- <img :src="logoIcon" alt="Logo" class="logo" />
16
- </div>
17
-
18
- <!-- Progress indicators -->
19
- <div class="progress-dots">
20
- <div class="dot" :class="{ active: dotIndex >= 0 }"></div>
21
- <div class="dot" :class="{ active: dotIndex >= 1 }"></div>
22
- <div class="dot" :class="{ active: dotIndex >= 2 }"></div>
23
- <div class="dot" :class="{ active: dotIndex >= 3 }"></div>
24
- </div>
2
+ <div class="my-auto relative flex justify-center flex-col items-center" style="height: 80vh">
3
+ <div class="spinner-container">
4
+ <div class="spinner"></div>
5
+ <img :src="logoIcon" alt="Beaker Logo" class="logo" />
25
6
  </div>
26
-
27
- <div class="message-container">
28
- <h2 class="message-text">{{ props.message }}</h2>
29
- <div class="status-bar">
30
- <div class="status-fill"></div>
31
- </div>
32
- </div>
33
- </div>
34
- </transition>
7
+ <span class="text-white text-3xl font-light mt-3">{{ props.message }}{{ dots }}</span>
35
8
  </div>
36
9
  </template>
37
10
 
38
11
  <script setup>
39
- import { ref, onMounted, onUnmounted } from "vue";
40
- import logoIcon from "@/assets/img/logo_icon.png";
41
-
42
- const dotIndex = ref(0);
43
- const progressWidth = ref(0);
44
- let dotInterval;
45
- let progressInterval;
46
-
47
- // Animate progress dots
48
- const animateDots = () => {
49
- dotIndex.value = (dotIndex.value + 1) % 5; // 0-4, with 4 being all off
50
- };
51
-
52
- // Animate progress bar
53
- onMounted(() => {
54
- dotInterval = setInterval(animateDots, 600);
55
- });
12
+ import { ref } from "vue";
13
+ import logoIcon from "@/assets/img/logo_icon_2.png";
56
14
 
57
- // Add page fade-in effect when modal closes
58
- const addPageFadeIn = () => {
59
- // Add global style for underlying page fade-in
60
- const style = document.createElement('style');
61
- style.textContent = `
62
- .page-fade-in {
63
- animation: pageReveal 0.6s ease-out forwards;
64
- }
65
- @keyframes pageReveal {
66
- from {
67
- opacity: 0.7;
68
- transform: scale(0.98);
69
- filter: blur(1px);
70
- }
71
- to {
72
- opacity: 1;
73
- transform: scale(1);
74
- filter: blur(0);
75
- }
76
- }
77
- `;
78
- document.head.appendChild(style);
79
-
80
- // Apply the class to the body
81
- document.body.classList.add('page-fade-in');
82
-
83
- // Remove the class and style after animation
84
- setTimeout(() => {
85
- document.body.classList.remove('page-fade-in');
86
- if (document.head.contains(style)) {
87
- document.head.removeChild(style);
88
- }
89
- }, 600);
90
- };
15
+ const dots = ref(".");
91
16
 
92
- onUnmounted(() => {
93
- if (dotInterval) clearInterval(dotInterval);
94
- addPageFadeIn();
95
- });
17
+ setInterval(() => {
18
+ dots.value += ".";
19
+ if (dots.value.length > 3) dots.value = ".";
20
+ }, 1000);
96
21
 
97
22
  const props = defineProps({
98
23
  message: {
@@ -102,285 +27,64 @@ const props = defineProps({
102
27
  });
103
28
  </script>
104
29
 
105
- <style lang="scss" scoped>
106
- .reconnect-overlay {
107
- position: fixed;
108
- top: -100vh;
109
- left: -100vw;
110
- right: -100vw;
111
- bottom: -100vh;
112
- z-index: 9999;
113
- --tw-ring-color: transparent !important;
114
- }
115
-
116
- .background-layer {
117
- position: absolute;
118
- top: 0;
119
- left: 0;
120
- right: 0;
121
- bottom: 0;
122
- background: rgba(26, 27, 30, 0.98);
123
- backdrop-filter: blur(12px);
124
- -webkit-backdrop-filter: blur(12px);
125
- }
126
-
127
- .reconnect-container {
128
- position: absolute;
129
- top: 100vh;
130
- left: 100vw;
131
- right: 100vw;
132
- bottom: 100vh;
133
- display: flex;
134
- flex-direction: column;
135
- align-items: center;
136
- justify-content: center;
137
- gap: 3rem;
138
- --tw-ring-color: transparent !important;
139
- }
140
-
141
- .loading-system {
142
- position: relative;
143
- display: flex;
144
- align-items: center;
145
- justify-content: center;
146
- }
147
-
148
- .ring-system {
30
+ <style scoped>
31
+ .spinner-container {
149
32
  position: relative;
150
- width: 160px;
151
- height: 160px;
152
- display: flex;
153
- align-items: center;
154
- justify-content: center;
33
+ width: 200px;
34
+ height: 200px;
155
35
  }
156
-
157
- .ring {
158
- position: absolute;
159
- border-radius: 50%;
160
- background: transparent !important;
161
- --tw-ring-color: transparent !important;
162
- border: 4px solid transparent;
163
- }
164
-
165
- .ring-outer {
166
- width: 160px;
167
- height: 160px;
168
- border-top: 4px solid #9dd3a8;
169
- border-right: 4px solid rgba(157, 211, 168, 0.3);
170
- border-bottom: 4px solid transparent;
171
- border-left: 4px solid transparent;
172
- animation: breathe-slow 3s ease-in-out infinite;
173
- top: 0;
174
- left: 0;
175
- }
176
-
177
- .ring-middle {
178
- width: 120px;
179
- height: 120px;
180
- border-top: 4px solid #88c999;
181
- border-right: 4px solid rgba(136, 201, 153, 0.4);
182
- border-bottom: 4px solid transparent;
183
- border-left: 4px solid transparent;
184
- animation: breathe-medium 2.5s ease-in-out infinite reverse;
185
- top: 20px;
186
- left: 20px;
187
- }
188
-
189
- .ring-inner {
190
- width: 80px;
191
- height: 80px;
192
- border-top: 4px solid #7bc187;
193
- border-right: 4px solid rgba(123, 193, 135, 0.5);
194
- border-bottom: 4px solid transparent;
195
- border-left: 4px solid transparent;
196
- animation: breathe-fast 2s ease-in-out infinite;
197
- top: 40px;
198
- left: 40px;
199
- }
200
-
201
36
  .logo {
202
- width: 72px;
203
- height: 72px;
37
+ position: absolute;
38
+ width: 180px;
39
+ height: 180px;
40
+ top: 50%;
41
+ left: 50%;
42
+ transform: translate(-50%, -50%);
204
43
  border-radius: 50%;
205
44
  object-fit: cover;
206
- z-index: 10;
207
- border: 2px solid rgba(136, 201, 153, 0.3);
208
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
45
+ object-position: center;
46
+ z-index: 2;
209
47
  }
210
-
211
- .progress-dots {
48
+ .spinner {
212
49
  position: absolute;
213
- bottom: -40px;
50
+ width: 185px;
51
+ height: 185px;
52
+ top: 50%;
214
53
  left: 50%;
215
- transform: translateX(-50%);
216
- display: flex;
217
- gap: 8px;
218
- }
219
-
220
- .dot {
221
- width: 8px;
222
- height: 8px;
54
+ transform: translate(-50%, -50%);
223
55
  border-radius: 50%;
224
- background: #44454b;
225
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
226
-
227
- &.active {
228
- background: #88c999;
229
- transform: scale(1.2);
230
- }
231
- }
232
-
233
- .message-container {
234
- text-align: center;
235
- max-width: 400px;
236
- }
237
-
238
- .message-text {
239
- color: #e2e2e5;
240
- font-size: 1.5rem;
241
- font-weight: 500;
242
- margin-bottom: 1rem;
243
- letter-spacing: 0.025em;
244
- }
245
-
246
- .status-bar {
247
- width: 300px;
248
- height: 8px;
249
- background: #35363c;
250
- border-radius: 4px;
251
- overflow: hidden;
252
- position: relative;
253
- }
254
-
255
- .status-fill {
256
- height: 100%;
257
- background: linear-gradient(90deg, #88c999 0%, #9dd3a8 50%, #88c999 100%);
258
- border-radius: 4px;
259
- width: 30%;
260
- animation: infinite-slide 2s ease-in-out infinite;
261
- position: relative;
262
- overflow: hidden;
56
+ border: 2px solid rgba(255, 255, 255, 0.1);
57
+ border-top: 2px solid #ffffff;
58
+ animation: spin 1s linear infinite;
263
59
  }
264
-
265
- .status-fill::after {
266
- content: '';
60
+ .glow {
267
61
  position: absolute;
268
- top: 0;
269
- left: -100%;
270
- width: 100%;
271
- height: 100%;
272
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
273
- animation: shimmer 2s ease-in-out infinite;
274
- }
275
-
276
- // Smooth beautiful animations
277
- @keyframes breathe-slow {
278
- 0% { transform: rotate(0deg) scale(1); opacity: 0.8; }
279
- 50% { transform: rotate(180deg) scale(1.05); opacity: 1; }
280
- 100% { transform: rotate(360deg) scale(1); opacity: 0.8; }
281
- }
282
-
283
- @keyframes breathe-medium {
284
- 0% { transform: rotate(0deg) scale(1); opacity: 0.9; }
285
- 50% { transform: rotate(-180deg) scale(0.95); opacity: 1; }
286
- 100% { transform: rotate(-360deg) scale(1); opacity: 0.9; }
287
- }
288
-
289
- @keyframes breathe-fast {
290
- 0% { transform: rotate(0deg) scale(1); opacity: 1; }
291
- 50% { transform: rotate(180deg) scale(1.08); opacity: 0.7; }
292
- 100% { transform: rotate(360deg) scale(1); opacity: 1; }
293
- }
294
-
295
- @keyframes infinite-slide {
296
- 0% { transform: translateX(-100%); }
297
- 50% { transform: translateX(250%); }
298
- 100% { transform: translateX(-100%); }
299
- }
300
-
301
- @keyframes shimmer {
302
- 0% { transform: translateX(-100%); }
303
- 50% { transform: translateX(100%); }
304
- 100% { transform: translateX(300%); }
305
- }
306
-
307
- // Staged beautiful transitions
308
- .background-fill-enter-active {
309
- transition: all 0.15s ease-out;
310
- }
311
-
312
- .background-fill-leave-active {
313
- transition: all 0.3s ease-in;
314
- }
315
-
316
- .background-fill-enter-from {
317
- opacity: 0;
318
- transform: scale(0.8);
319
- }
320
-
321
- .background-fill-leave-to {
322
- opacity: 0;
323
- transform: scale(1.2);
324
- }
325
-
326
- .reconnect-content-enter-active {
327
- transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
328
- transition-delay: 0.1s;
329
- }
330
-
331
- .reconnect-content-leave-active {
332
- transition: all 0.5s cubic-bezier(0.55, 0.085, 0.68, 0.53);
333
- }
334
-
335
- .reconnect-content-enter-from {
336
- opacity: 0;
337
- transform: scale(0.9) translateY(20px);
338
- filter: blur(4px);
339
- }
340
-
341
- .reconnect-content-leave-to {
342
- opacity: 0;
343
- transform: scale(1.1) translateY(-10px);
344
- filter: blur(2px);
62
+ width: 220px;
63
+ height: 220px;
64
+ top: 50%;
65
+ left: 50%;
66
+ transform: translate(-50%, -50%);
67
+ border-radius: 50%;
68
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
69
+ animation: pulse 2s ease-in-out infinite;
345
70
  }
346
-
347
- // Responsive design
348
- @media (max-width: 768px) {
349
- .ring-system {
350
- width: 120px;
351
- height: 120px;
71
+ @keyframes spin {
72
+ 0% {
73
+ transform: translate(-50%, -50%) rotate(0deg);
352
74
  }
353
-
354
- .ring-outer {
355
- width: 120px;
356
- height: 120px;
75
+ 100% {
76
+ transform: translate(-50%, -50%) rotate(360deg);
357
77
  }
358
-
359
- .ring-middle {
360
- width: 90px;
361
- height: 90px;
362
- top: 15px;
363
- left: 15px;
364
- }
365
-
366
- .ring-inner {
367
- width: 60px;
368
- height: 60px;
369
- top: 30px;
370
- left: 30px;
371
- }
372
-
373
- .logo {
374
- width: 54px;
375
- height: 54px;
376
- }
377
-
378
- .message-text {
379
- font-size: 1.25rem;
78
+ }
79
+ @keyframes pulse {
80
+ 0%,
81
+ 100% {
82
+ transform: translate(-50%, -50%) scale(1);
83
+ opacity: 0.5;
380
84
  }
381
-
382
- .status-bar {
383
- width: 250px;
85
+ 50% {
86
+ transform: translate(-50%, -50%) scale(1.05);
87
+ opacity: 0.7;
384
88
  }
385
89
  }
386
90
  </style>
@@ -1,17 +1,47 @@
1
1
  <template>
2
2
  <div class="darkBG h-screen w-screen z-[1000] fixed flex items-center flex-col justify-center gap-y-3">
3
3
  <img src="@/assets/img/logo_trans.png" class="w-[300px] mx-auto" />
4
- <SpinnerIcon />
4
+ <svg class="spinner" viewBox="0 0 50 50">
5
+ <circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="5"></circle>
6
+ </svg>
5
7
  </div>
6
8
  </template>
7
-
8
- <script setup>
9
- import { SpinnerIcon } from "@/components/icons";
10
- </script>
11
9
  <style lang="scss" scoped>
12
10
  .darkBG {
13
11
  background-color: rgba(28, 28, 49, 100%);
14
12
  }
13
+ .spinner {
14
+ @apply mx-auto;
15
+ animation: rotate 2s linear infinite;
16
+ z-index: 2;
17
+
18
+ width: 30px;
19
+ height: 30px;
20
+ & .path {
21
+ stroke: rgba(70, 198, 210, 100%);
22
+ stroke-linecap: round;
23
+ animation: dash 1.5s ease-in-out infinite;
24
+ }
25
+ }
26
+ @keyframes rotate {
27
+ 100% {
28
+ transform: rotate(360deg);
29
+ }
30
+ }
31
+ @keyframes dash {
32
+ 0% {
33
+ stroke-dasharray: 1, 150;
34
+ stroke-dashoffset: 0;
35
+ }
36
+ 50% {
37
+ stroke-dasharray: 90, 150;
38
+ stroke-dashoffset: -35;
39
+ }
40
+ 100% {
41
+ stroke-dasharray: 90, 150;
42
+ stroke-dashoffset: -124;
43
+ }
44
+ }
15
45
  </style>
16
46
 
17
47
  <style>