@necrolab/dashboard 0.4.61 → 0.4.208

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 +79 -43
  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 +77 -13
  8. package/backend/index.js +2 -2
  9. package/backend/mock-data.js +38 -29
  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 +10 -81
  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 +136 -378
  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 +38 -171
  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 +235 -207
  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,19 +1,16 @@
1
1
  <template>
2
2
  <button
3
3
  @click="increase"
4
- :class="[
5
- 'sort-toggle',
6
- { 'darker': props.darker }
7
- ]"
4
+ :class="`w-full min-w-14 px-1 my-2 ${
5
+ props.darker ? 'bg-dark-500 text-white h-10 rounded-lg' : 'bg-dark-550 text-gray h-8 rounded'
6
+ } overflow-hidden`"
8
7
  >
9
- <component :is="getCurrentIcon()" class="icon" />
10
- <span class="text">{{ getCurrentText() }}</span>
8
+ {{ sortOptions[currentOpt] }}
11
9
  </button>
12
10
  </template>
13
11
 
14
12
  <script setup>
15
13
  import { ref } from "vue";
16
- import { UpIcon, DownIcon, FilterIcon, CheckIcon, CloseIcon } from "@/components/icons";
17
14
 
18
15
  let sortOptions = ref(["none", "asc", "desc", "none"]);
19
16
  const currentOpt = ref(0);
@@ -27,7 +24,6 @@ const props = defineProps({
27
24
  current: String,
28
25
  darker: Boolean
29
26
  });
30
-
31
27
  if (props.options) sortOptions.value = props.options;
32
28
  if (props.current) currentOpt.value = sortOptions.value.findIndex((s) => s === props.current);
33
29
 
@@ -38,70 +34,4 @@ const increase = () => {
38
34
  emit("change", sortOptions.value[currentOpt.value]);
39
35
  if (currentOpt.value === (props.options ? sortOptions.value.length : 3)) currentOpt.value = 0;
40
36
  };
41
-
42
- const getCurrentIcon = () => {
43
- const current = sortOptions.value[currentOpt.value];
44
-
45
- // Handle filter options (All, WL, BL)
46
- if (props.options && props.options.includes('All')) {
47
- switch (current) {
48
- case 'All': return FilterIcon;
49
- case 'WL': return CheckIcon;
50
- case 'BL': return CloseIcon;
51
- default: return FilterIcon;
52
- }
53
- }
54
-
55
- // Handle sort options (none, asc, desc)
56
- switch (current) {
57
- case 'asc': return UpIcon;
58
- case 'desc': return DownIcon;
59
- case 'none':
60
- default: return FilterIcon;
61
- }
62
- };
63
-
64
- const getCurrentText = () => {
65
- const current = sortOptions.value[currentOpt.value];
66
-
67
- // Handle filter options (All, WL, BL)
68
- if (props.options && props.options.includes('All')) {
69
- return current;
70
- }
71
-
72
- // Handle sort options
73
- switch (current) {
74
- case 'asc': return 'Low';
75
- case 'desc': return 'High';
76
- case 'none': return 'None';
77
- default: return current;
78
- }
79
- };
80
37
  </script>
81
-
82
- <style scoped>
83
- .sort-toggle {
84
- @apply flex items-center gap-2 px-3 py-2 bg-dark-500 border border-dark-650 rounded text-sm font-medium transition-all duration-150 hover:bg-dark-550 hover:border-dark-700 focus:outline-none;
85
- color: #cccccc;
86
- min-width: 80px;
87
- }
88
-
89
- .sort-toggle:hover {
90
- color: #ffffff;
91
- }
92
-
93
- .sort-toggle.darker {
94
- @apply bg-dark-550 border-dark-700 hover:bg-dark-600;
95
- color: #d4d4d4;
96
- min-width: 100px;
97
- height: 40px;
98
- }
99
-
100
- .icon {
101
- @apply w-4 h-4 flex-shrink-0;
102
- }
103
-
104
- .text {
105
- @apply text-center flex-1;
106
- }
107
- </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="border-b border-dark-600 w-full px-2 md:px-4 text-white text-xs py-4 grid items-center" style="background-color: rgb(26 27 30);">
2
+ <div class="border-b-2 border-border w-full px-4 text-white text-xs py-4 grid grid-cols-12">
3
3
  <slot />
4
4
  </div>
5
5
  </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="px-2 md:px-4 text-xs grid text-white py-4 items-center h-full hover:bg-dark-500 transition-colors">
2
+ <div class="px-4 text-xs grid grid-cols-12 text-white py-4 items-center h-full">
3
3
  <slot />
4
4
  </div>
5
5
  </template>
@@ -5,27 +5,10 @@
5
5
  </template>
6
6
  <style lang="scss">
7
7
  .table-component {
8
- @apply flex-col bg-clip-padding rounded relative box-border border border-dark-600 bg-dark-500;
9
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
10
- overflow: auto !important;
11
- overscroll-behavior: auto !important;
12
- touch-action: auto !important;
13
- max-height: calc(100vh - 200px);
8
+ @apply flex-col bg-clip-padding rounded relative box-border border-2 border-b-0 border-dark-550 bg-dark-500;
14
9
  }
15
10
 
16
11
  .table-component > .grid {
17
- @apply bg-dark-400;
18
- border-bottom: 1px solid #3d3e44;
19
- }
20
-
21
- /* iPhone landscape mode table optimization */
22
- @media screen and (max-height: 500px) and (orientation: landscape) {
23
- .table-component {
24
- max-height: calc(100vh - 160px) !important; // Leave even more space at bottom
25
- width: 100% !important;
26
- overflow-x: auto !important; // Allow horizontal scrolling if needed
27
- overflow-y: auto !important; // Allow vertical scrolling
28
- margin-bottom: 2rem !important; // Increase bottom margin for better spacing
29
- }
12
+ @apply bg-dark-500;
30
13
  }
31
14
  </style>
@@ -3,36 +3,25 @@
3
3
  <template #header> Check Stock <BoxIcon class="ml-4" /> </template>
4
4
  <!-- Event ID -->
5
5
  <div class="input-wrapper mt-7 mb-4">
6
- <label class="label-override mb-2">Event ID or URL <StadiumIcon /></label>
7
- <div class="input-default required">
8
- <input
9
- :placeholder="!isEU(ui.currentCountry.siteId) ? '102PDA9125510GYU' : '529171'"
10
- v-model="eventId"
11
- />
6
+ <label class="label-override mb-2">Event ID <StadiumIcon /></label>
7
+ <div class="input-default">
8
+ <input placeholder="102PDA9125510GYU" v-model="eventId" />
9
+ <span class="text-red-400 my-auto mr-2 mt-3">* </span>
12
10
  </div>
13
11
  </div>
14
- <!-- Presale Code -->
15
- <div class="input-wrapper mb-4">
12
+ <!-- Ticker Quantity -->
13
+ <div class="input-wrapper mb-8">
16
14
  <label class="label-override mb-2">Presale code <AwardIcon /></label>
17
15
  <div class="input-default">
18
16
  <input placeholder="Presale code" v-model="presaleCode" />
19
17
  </div>
20
18
  </div>
21
- <!-- DID -->
22
- <div class="input-wrapper mb-4" v-if="!isEU(ui.currentCountry.siteId)">
23
- <label class="label-override mb-2">DID <AwardIcon /></label>
24
- <div class="input-default">
25
- <input placeholder="psl" v-model="eventDid" />
26
- </div>
27
- </div>
28
- <!-- CL ORIGIN -->
29
- <div class="input-wrapper mb-8" v-if="isEU(ui.currentCountry.siteId)">
30
- <label class="label-override mb-2">CL Origin / SubChannel ID <AwardIcon /></label>
31
- <div class="input-default">
32
- <input placeholder="ORIGIN2" v-model="clOrigin" />
33
- </div>
34
- </div>
35
- <button class="btn-action ml-auto" @click="done()">Check Stock <BoxIcon /></button>
19
+ <button
20
+ class="button-default hover:opacity-70 active:opacity-50 bg-dark-400 w-48 text-xs flex items-center justify-center gap-x-2 ml-auto"
21
+ @click="done()"
22
+ >
23
+ Checks Stock <BoxIcon />
24
+ </button>
36
25
  </Modal>
37
26
  </template>
38
27
  <style lang="scss" scoped>
@@ -47,16 +36,12 @@ import Modal from "@/components/ui/Modal.vue";
47
36
  import { StadiumIcon, BoxIcon, AwardIcon } from "@/components/icons";
48
37
  import { useUIStore } from "@/stores/ui";
49
38
  import { ref } from "vue";
50
- import { isEU } from "@/stores/utils";
51
39
 
52
40
  const ui = useUIStore();
53
41
  const eventId = ref("");
54
42
  const presaleCode = ref("");
55
- const eventDid = ref("");
56
- const clOrigin = ref("");
57
-
58
43
  function done() {
59
44
  ui.toggleModal("");
60
- ui.checkStock(eventId.value, presaleCode.value, eventDid.value, clOrigin.value);
45
+ ui.checkStock(eventId.value, presaleCode.value);
61
46
  }
62
47
  </script>
@@ -1,21 +1,29 @@
1
1
  <template>
2
- <div class="task-controls flex-row">
2
+ <div class="task-controls flex-row" v-once>
3
3
  <div class="control-buttons mb-4 xl:mb-0">
4
- <button @click="$emit('startAll')" class="bg-green-400 smooth-hover responsive-button border-none">
4
+ <button @click="$emit('startAll')" class="bg-green-400 smooth-hover flex-grow xl:flex-initial">
5
5
  Start <PlayIcon />
6
6
  </button>
7
- <button @click="$emit('stopAll')" class="bg-red-400 smooth-hover responsive-button border-none">
7
+ <button @click="$emit('stopAll')" class="bg-red-400 smooth-hover flex-grow xl:flex-initial">
8
8
  Stop <PauseIcon />
9
9
  </button>
10
- <button @click="$emit('deleteAll')" class="bg-dark-400 smooth-hover responsive-button border border-dark-650 hover:border-dark-700">
10
+ <button @click="$emit('deleteAll')" class="bg-dark-400 smooth-hover flex-grow xl:flex-initial">
11
11
  Delete <TrashIcon />
12
12
  </button>
13
- <h4 class="text-light-300 text-sm flex-grow xl:flex-initial"></h4>
13
+ <h4 class="text-light-300text-sm flex-grow xl:flex-initial"></h4>
14
14
  </div>
15
15
  <div class="flex gap-x-3">
16
+ <button @click="$emit('expand')" class="bg-dark-400 smooth-hover flex-grow xl:flex-initial">
17
+ Expand
18
+ <ExpandIcon class="ml-2" />
19
+ </button>
20
+ <button @click="$emit('decrease')" class="bg-dark-400 smooth-hover flex-grow xl:flex-initial">
21
+ Fold
22
+ <ShrinkIcon class="ml-2" />
23
+ </button>
16
24
  <button
17
25
  :disabled="ui.disabledButtons['add-tasks']"
18
- class="bg-dark-400 disabled:opacity-70 smooth-hover flex-grow xl:flex-initial w-36 border border-dark-650 hover:border-dark-700"
26
+ class="bg-dark-400 disabled:opacity-70 smooth-hover flex-grow xl:flex-initial w-36"
19
27
  @click="ui.toggleModal('create-task')"
20
28
  >
21
29
  Create Task
@@ -23,10 +31,9 @@
23
31
  </button>
24
32
 
25
33
  <button
26
- class="bg-dark-400 smooth-hover flex-grow xl:flex-initial w-36 border border-dark-650 hover:border-dark-700"
34
+ class="bg-dark-400 smooth-hover flex-grow xl:flex-initial w-36"
27
35
  @click="ui.toggleModal('mass-edit-presale-code')"
28
36
  :disabled="ui.disabledButtons['mass-edit']"
29
- v-if="ui.currentModule == 'TM'"
30
37
  >
31
38
  Mass Edit
32
39
  <EditIcon class="ml-2" />
@@ -46,13 +53,6 @@ const isExpanded = ref(false);
46
53
  button {
47
54
  @apply text-white h-10 rounded-md text-xs flex items-center justify-center font-medium px-4;
48
55
  }
49
-
50
- .responsive-button {
51
- min-width: 80px;
52
- max-width: 120px;
53
- @apply flex-grow xl:flex-initial;
54
- }
55
-
56
56
  .task-controls {
57
57
  @apply gap-x-3;
58
58
  .control-buttons {
@@ -64,9 +64,9 @@ button {
64
64
  }
65
65
  }
66
66
  .expand-shrink {
67
- @apply flex gap-x-2;
67
+ @apply flex border border-dark-400 rounded-md;
68
68
  button {
69
- @apply text-white text-xs px-4 flex items-center justify-center gap-x-4 duration-200 border border-light-300 hover:border-light-400;
69
+ @apply text-white text-xs px-4 flex items-center justify-center gap-x-4 duration-200;
70
70
  }
71
71
  }
72
72
  }
@@ -1,11 +1,27 @@
1
1
  <template>
2
- <div class="mobile-controls flex items-center justify-between" v-once>
2
+ <div class="mobile-controls grow items-center" v-once>
3
+ <div>
4
+ <ul class="mobile-icons">
5
+ <li>
6
+ <button @click="$emit('startAll')"><PlayIcon /></button>
7
+ </li>
8
+ <li>
9
+ <button @click="$emit('stopAll')"><PauseIcon /></button>
10
+ </li>
11
+
12
+ <li>
13
+ <button @click="ui.toggleModal('mass-edit-presale-code')">
14
+ <EditIcon />
15
+ </button>
16
+ </li>
17
+ </ul>
18
+ </div>
3
19
  <div class="expand-shrink">
4
- <button class="mobile-btn" @click="$emit('expand')">
20
+ <button class="rounded-md flex-1 bg-dark-400 xl:flex-auto" @click="$emit('expand')">
5
21
  Expand
6
22
  <ExpandIcon />
7
23
  </button>
8
- <button class="mobile-btn" @click="$emit('fold')">
24
+ <button class="rounded-md flex-1 bg-dark-400 xl:flex-auto" @click="$emit('decrease')">
9
25
  Fold
10
26
  <ShrinkIcon />
11
27
  </button>
@@ -20,12 +36,33 @@ const ui = useUIStore();
20
36
  </script>
21
37
  <style lang="scss" scoped>
22
38
  .mobile-controls {
39
+ @apply gap-x-4;
23
40
  .expand-shrink {
24
- @apply flex gap-x-2;
25
- .mobile-btn {
26
- @apply text-white text-xs px-3 flex items-center justify-center gap-x-1 h-10 rounded-md bg-dark-400 border border-dark-650 hover:border-dark-700 transition-all duration-150 font-medium;
27
- width: 80px;
28
- font-size: 11px;
41
+ @apply flex ml-auto gap-x-2;
42
+ button {
43
+ width: 140px;
44
+ @apply text-white text-xs px-4 flex items-center justify-center gap-x-2 duration-200 h-9;
45
+ }
46
+ }
47
+ ul {
48
+ @apply items-center gap-x-2;
49
+ li {
50
+ @apply text-white;
51
+ }
52
+ svg {
53
+ width: 15px;
54
+ height: 15px;
55
+ }
56
+ }
57
+ }
58
+ @media (max-width: 1024px) {
59
+ .mobile-controls {
60
+ .expand-shrink {
61
+ button {
62
+ width: 100px;
63
+ font-size: 12px !important;
64
+ @apply gap-x-2 px-0;
65
+ }
29
66
  }
30
67
  }
31
68
  }