@necrolab/dashboard 0.4.220 → 0.5.1

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 (140) hide show
  1. package/.prettierrc +27 -1
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +64 -2
  4. package/artwork/image.png +0 -0
  5. package/backend/api.js +26 -24
  6. package/backend/auth.js +2 -2
  7. package/backend/batching.js +1 -1
  8. package/backend/endpoints.js +8 -11
  9. package/backend/index.js +2 -2
  10. package/backend/mock-data.js +27 -36
  11. package/backend/mock-src/classes/logger.js +5 -7
  12. package/backend/mock-src/classes/utils.js +3 -2
  13. package/backend/mock-src/ticketmaster.js +4 -4
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +0 -1
  16. package/dev-server.js +134 -0
  17. package/exit +209 -0
  18. package/index.html +78 -8
  19. package/index.js +1 -1
  20. package/jsconfig.json +16 -0
  21. package/package.json +39 -25
  22. package/postcss.config.js +1 -1
  23. package/postinstall.js +124 -20
  24. package/public/android-chrome-192x192.png +0 -0
  25. package/public/android-chrome-512x512.png +0 -0
  26. package/public/apple-touch-icon.png +0 -0
  27. package/public/favicon-16x16.png +0 -0
  28. package/public/favicon-32x32.png +0 -0
  29. package/public/favicon.ico +0 -0
  30. package/public/img/logo_trans.png +0 -0
  31. package/public/img/necro_logo.png +0 -0
  32. package/public/manifest.json +16 -10
  33. package/run +176 -9
  34. package/src/App.vue +498 -85
  35. package/src/assets/css/base/reset.scss +43 -0
  36. package/src/assets/css/base/scroll.scss +114 -0
  37. package/src/assets/css/base/typography.scss +37 -0
  38. package/src/assets/css/components/buttons.scss +216 -0
  39. package/src/assets/css/components/forms.scss +221 -0
  40. package/src/assets/css/components/modals.scss +13 -0
  41. package/src/assets/css/components/tables.scss +27 -0
  42. package/src/assets/css/components/toasts.scss +100 -0
  43. package/src/assets/css/main.scss +201 -122
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/background.svg.backup +11 -0
  46. package/src/assets/img/logo_trans.png +0 -0
  47. package/src/components/Auth/LoginForm.vue +62 -11
  48. package/src/components/Editors/Account/Account.vue +116 -40
  49. package/src/components/Editors/Account/AccountCreator.vue +88 -39
  50. package/src/components/Editors/Account/AccountView.vue +102 -34
  51. package/src/components/Editors/Account/CreateAccount.vue +80 -32
  52. package/src/components/Editors/Profile/CreateProfile.vue +269 -83
  53. package/src/components/Editors/Profile/Profile.vue +132 -47
  54. package/src/components/Editors/Profile/ProfileCountryChooser.vue +82 -20
  55. package/src/components/Editors/Profile/ProfileView.vue +89 -32
  56. package/src/components/Editors/TagLabel.vue +67 -6
  57. package/src/components/Editors/TagToggle.vue +7 -2
  58. package/src/components/Filter/Filter.vue +288 -71
  59. package/src/components/Filter/FilterPreview.vue +202 -31
  60. package/src/components/Filter/PriceSortToggle.vue +76 -6
  61. package/src/components/Table/Header.vue +1 -1
  62. package/src/components/Table/Row.vue +1 -1
  63. package/src/components/Table/Table.vue +19 -2
  64. package/src/components/Tasks/CheckStock.vue +6 -8
  65. package/src/components/Tasks/Controls/DesktopControls.vue +27 -17
  66. package/src/components/Tasks/Controls/MobileControls.vue +8 -45
  67. package/src/components/Tasks/CreateTaskAXS.vue +80 -72
  68. package/src/components/Tasks/CreateTaskTM.vue +95 -141
  69. package/src/components/Tasks/MassEdit.vue +4 -6
  70. package/src/components/Tasks/QuickSettings.vue +199 -30
  71. package/src/components/Tasks/ScrapeVenue.vue +5 -6
  72. package/src/components/Tasks/Stats.vue +50 -24
  73. package/src/components/Tasks/Task.vue +384 -179
  74. package/src/components/Tasks/TaskLabel.vue +2 -2
  75. package/src/components/Tasks/TaskView.vue +136 -48
  76. package/src/components/Tasks/Utilities.vue +25 -10
  77. package/src/components/Tasks/ViewTask.vue +321 -0
  78. package/src/components/icons/Bag.vue +1 -1
  79. package/src/components/icons/Check.vue +5 -0
  80. package/src/components/icons/Close.vue +21 -0
  81. package/src/components/icons/CloseX.vue +5 -0
  82. package/src/components/icons/Eye.vue +6 -0
  83. package/src/components/icons/Key.vue +21 -0
  84. package/src/components/icons/Loyalty.vue +1 -1
  85. package/src/components/icons/Mail.vue +2 -2
  86. package/src/components/icons/Pencil.vue +21 -0
  87. package/src/components/icons/Play.vue +2 -2
  88. package/src/components/icons/Profile.vue +18 -0
  89. package/src/components/icons/Reload.vue +4 -5
  90. package/src/components/icons/Sandclock.vue +2 -2
  91. package/src/components/icons/Sell.vue +21 -0
  92. package/src/components/icons/Spinner.vue +42 -0
  93. package/src/components/icons/SquareCheck.vue +18 -0
  94. package/src/components/icons/SquareUncheck.vue +18 -0
  95. package/src/components/icons/Stadium.vue +1 -1
  96. package/src/components/icons/Wildcard.vue +18 -0
  97. package/src/components/icons/index.js +26 -1
  98. package/src/components/ui/Modal.vue +107 -13
  99. package/src/components/ui/Navbar.vue +175 -40
  100. package/src/components/ui/ReconnectIndicator.vue +351 -55
  101. package/src/components/ui/Splash.vue +5 -35
  102. package/src/components/ui/controls/CountryChooser.vue +200 -62
  103. package/src/components/ui/controls/atomic/Checkbox.vue +119 -10
  104. package/src/components/ui/controls/atomic/Dropdown.vue +216 -39
  105. package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
  106. package/src/components/ui/controls/atomic/MultiDropdown.vue +300 -37
  107. package/src/components/ui/controls/atomic/Switch.vue +53 -25
  108. package/src/composables/useClickOutside.js +21 -0
  109. package/src/composables/useDropdownPosition.js +174 -0
  110. package/src/libs/Filter.js +60 -24
  111. package/src/registerServiceWorker.js +1 -1
  112. package/src/stores/connection.js +4 -4
  113. package/src/stores/sampleData.js +172 -199
  114. package/src/stores/ui.js +55 -20
  115. package/src/stores/utils.js +30 -4
  116. package/src/types/index.js +41 -0
  117. package/src/utils/debug.js +1 -0
  118. package/src/views/Accounts.vue +116 -50
  119. package/src/views/Console.vue +394 -79
  120. package/src/views/Editor.vue +1176 -123
  121. package/src/views/FilterBuilder.vue +528 -250
  122. package/src/views/Login.vue +76 -14
  123. package/src/views/Profiles.vue +119 -34
  124. package/src/views/Tasks.vue +266 -98
  125. package/static/offline.html +192 -50
  126. package/switch-branch.sh +41 -0
  127. package/tailwind.config.js +119 -27
  128. package/vite.config.js +73 -16
  129. package/workbox-config.cjs +63 -0
  130. package/ICONS.md +0 -21
  131. package/public/img/background.svg +0 -14
  132. package/public/img/logo.png +0 -0
  133. package/public/img/logo_icon.png +0 -0
  134. package/public/img/logo_icon_2.png +0 -0
  135. package/src/assets/css/_input.scss +0 -143
  136. package/src/assets/img/logo.png +0 -0
  137. package/src/assets/img/logo_icon.png +0 -0
  138. package/src/assets/img/logo_icon_2.png +0 -0
  139. package/vue.config.js +0 -32
  140. package/workbox-config.js +0 -7
@@ -1,11 +1,11 @@
1
1
  <template>
2
- <div class="flex flex-col justify-center mt-20" v-once>
3
- <div class="mx-auto flex w-auto rounded-xl mb-8">
4
- <img src="@/assets/img/logo_trans.png" class="h-14 mr-4 z-30 object-cover" alt="Logo: Necro" />
5
- </div>
6
- <h2 class="text-3xl text-white text-center font-bold mb-4">Login</h2>
2
+ <div class="login-container" v-once>
3
+ <div class="login-card">
4
+ <div class="flex justify-center mb-8">
5
+ <img src="@/assets/img/logo_trans.png" class="h-16 object-cover" alt="Logo: Necro" />
6
+ </div>
7
+ <h2 class="text-l text-white text-center font-bold mb-6">Please login to proceed</h2>
7
8
 
8
- <div class="login">
9
9
  <LoginForm />
10
10
  </div>
11
11
  </div>
@@ -14,14 +14,76 @@
14
14
  import LoginForm from "@/components/Auth/LoginForm.vue";
15
15
  </script>
16
16
  <style lang="scss" scoped>
17
- .login {
18
- // @apply m-auto;
19
- @media (min-width: 900px) {
20
- width: 400px;
21
- @apply m-auto;
22
- }
23
- @media (max-width: 899px) {
24
- @apply px-6;
17
+ .login-container {
18
+ @apply flex flex-col items-center min-h-screen px-4;
19
+ margin-top: 3vh;
20
+
21
+ // Mobile devices
22
+ @media (max-width: 480px) {
23
+ margin-top: 2vh;
24
+ }
25
+
26
+ // Landscape mode
27
+ @media (orientation: landscape) {
28
+ margin-top: 1vh;
29
+ justify-content: flex-start;
30
+ min-height: 100vh;
31
+ min-height: 100dvh;
32
+ }
33
+ }
34
+
35
+ .login-card {
36
+ @apply bg-dark-400 border border-dark-650 rounded-lg shadow-xl;
37
+ backdrop-filter: blur(10px);
38
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
39
+ width: 100%;
40
+ max-width: 420px;
41
+ padding: 1.75rem;
42
+
43
+ // Mobile devices
44
+ @media (max-width: 480px) {
45
+ max-width: 380px;
46
+ padding: 1.5rem;
47
+ }
48
+
49
+ // Landscape mode
50
+ @media (orientation: landscape) {
51
+ padding: 1.25rem;
52
+ margin: 0.25rem 0;
53
+
54
+ h2 {
55
+ @apply text-lg mb-2;
56
+ }
57
+
58
+ .flex.justify-center {
59
+ @apply mb-2;
60
+
61
+ img {
62
+ @apply h-10;
63
+ }
64
+ }
65
+ }
66
+ }
67
+
68
+ // Logo responsive sizing
69
+ .login-card img {
70
+ @media (max-width: 480px) {
71
+ @apply h-12;
72
+ }
73
+
74
+ @media (orientation: landscape) {
75
+ @apply h-10;
76
+ }
77
+ }
78
+
79
+ // Title responsive sizing
80
+ .login-card h2 {
81
+ @media (max-width: 480px) {
82
+ @apply text-lg mb-3;
83
+ }
84
+
85
+ @media (orientation: landscape) {
86
+ @apply text-base mb-2;
25
87
  }
26
88
  }
27
89
  </style>
@@ -1,11 +1,14 @@
1
1
  <template>
2
2
  <div>
3
- <div class="flex items-center justify-between">
3
+ <div class="flex items-center justify-between pt-5 pb-2">
4
4
  <!-- Heading -->
5
- <h4 class="text-white text-base font-bold mb-5 pt-5">
6
- Profiles
7
- <span class="text-light-300 pl-1">{{ ui.getSelectedProfiles().length }}</span>
8
- </h4>
5
+ <div class="flex items-center justify-center gap-4">
6
+ <GroupIcon class="cursor-pointer smooth-hover text-white" />
7
+ <h4 class="text-base font-semibold text-light-300">
8
+ Profiles
9
+ <span class="text-sm font-medium text-light-400 pl-1">{{ ui.getSelectedProfiles().length }}</span>
10
+ </h4>
11
+ </div>
9
12
  <ul class="mobile-icons">
10
13
  <li>
11
14
  <EyeToggle v-model="privacy" />
@@ -14,62 +17,68 @@
14
17
  <button
15
18
  :disabled="ui.disabledButtons['add-profiles']"
16
19
  @click="ui.toggleModal('create-profile', true)"
20
+ class="smooth-hover"
17
21
  >
18
- <PlusIcon />
22
+ <PlusIcon class="w-4 h-4" />
19
23
  </button>
20
24
  </li>
21
25
  <li>
22
- <button :disabled="ui.disabledButtons['add-profiles']" @click="disable">
23
- <img width="15px" src="/img/controls/disable.svg" />
26
+ <button
27
+ :disabled="ui.disabledButtons['add-profiles']"
28
+ @click="disable"
29
+ class="smooth-hover text-red-400"
30
+ >
31
+ <CloseXIcon />
24
32
  </button>
25
33
  </li>
26
34
  <li>
27
- <button :disabled="ui.disabledButtons['add-profiles']" @click="enable">
28
- <img width="15px" src="/img/controls/enable.svg" />
35
+ <button
36
+ :disabled="ui.disabledButtons['add-profiles']"
37
+ @click="enable"
38
+ class="smooth-hover text-green-400"
39
+ >
40
+ <CheckIcon />
29
41
  </button>
30
42
  </li>
31
43
  </ul>
32
44
  </div>
33
45
 
34
46
  <div class="flex justify-between mb-3">
35
- <div class="sm:w-auto w-full flex items-center justify-start gap-1">
47
+ <div class="unified-search-group sm:w-auto w-full flex items-center justify-start">
36
48
  <TagToggle
37
- class="smooth-hover rounded-l min-w-9"
49
+ class="smooth-hover"
38
50
  :options="['All', 'Enabled', 'Disabled']"
39
51
  @change="(f) => (ui.search.profiles.show = f)"
52
+ :noBorder="true"
40
53
  />
41
54
  <TagToggle
42
- class="smooth-hover min-w-14"
55
+ class="smooth-hover"
43
56
  :options="['Name', 'Card']"
44
57
  @change="(f) => (ui.search.profiles.field = f)"
58
+ :noBorder="true"
45
59
  />
46
60
 
47
61
  <input
48
- class="h-10 min-w-32 lg:min-w-38 text-white text-sm p-2 bg-dark-500 relative border-2 border-dark-550"
62
+ class="min-w-32 lg:min-w-38 text-white text-sm"
49
63
  :placeholder="`Search ${ui.search.profiles.field}s`"
50
64
  v-model="ui.search.profiles.query"
51
65
  />
52
66
 
53
- <!-- <TagToggle
54
- class="smooth-hover w-32 rounded-r"
55
- :options="allTags"
56
- @change="(f) => (ui.search.profiles.tag = f)"
57
- /> -->
58
67
  <Dropdown
59
- class="rounded-r w-32 bg-dark-500 relative z-50 border-2 border-dark-550"
60
- style="margin-left: 0 !important; border-width: 2px !important"
68
+ class="dropdown-unified w-32 relative z-50"
61
69
  rightAmount="right-1"
62
70
  default="Any"
63
71
  :value="ui.search.profiles.tag"
64
72
  :onClick="(f) => (ui.search.profiles.tag = f)"
65
73
  :options="allTags"
74
+ :includeAdjacentButtons="true"
66
75
  :capitalize="true"
67
76
  />
68
77
  </div>
69
78
 
70
79
  <div class="gap-3 lg:flex hidden">
71
80
  <div
72
- class="bg-dark-400 justify-between px-4 w-36 flex text-white text-sm items-center py-1 rounded-lg ml-auto h-10"
81
+ class="bg-dark-400 border border-dark-650 justify-between px-4 w-36 flex text-white text-xs font-medium items-center rounded-md ml-auto h-10"
73
82
  >
74
83
  <p>Privacy</p>
75
84
  <Switch class="scale-75" v-model="privacy" />
@@ -77,20 +86,20 @@
77
86
  <button
78
87
  :disabled="ui.disabledButtons['disable-profiles']"
79
88
  @click="disable"
80
- class="bg-red-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-sm justify-center items-center py-1 px-2 rounded-lg ml-auto h-10"
89
+ class="bg-red-400 disabled:opacity-70 smooth-hover border-none w-36 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
81
90
  >
82
- Disable <img width="16px" src="/img/controls/disable.svg" class="ml-2" />
91
+ Disable <img class="w-4 h-4 ml-2" src="/img/controls/disable.svg" />
83
92
  </button>
84
93
  <button
85
94
  :disabled="ui.disabledButtons['enable-profiles']"
86
95
  @click="enable"
87
- class="bg-green-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-sm justify-center items-center py-1 px-2 rounded-lg ml-auto h-10"
96
+ class="bg-green-400 disabled:opacity-70 smooth-hover border-none w-36 flex text-white text-xs font-medium justify-center items-center rounded-md ml-auto h-10"
88
97
  >
89
- Enable <img width="16px" src="/img/controls/enable.svg" class="ml-2" />
98
+ Enable <img class="w-4 h-4 ml-2" src="/img/controls/enable.svg" />
90
99
  </button>
91
100
  <button
92
101
  :disabled="ui.disabledButtons['add-profiles']"
93
- class="bg-dark-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-sm justify-center items-center py-1 px-2 rounded-lg ml-auto h-10"
102
+ class="bg-dark-400 disabled:opacity-70 smooth-hover w-36 flex text-white text-xs font-medium justify-center items-center rounded-md border border-dark-650 hover:border-dark-700 ml-auto h-10"
94
103
  @click="ui.toggleModal('create-profile')"
95
104
  >
96
105
  Add Profile
@@ -100,10 +109,10 @@
100
109
  </div>
101
110
 
102
111
  <!-- Tasks (Table) -->
103
- <ProfileView :tasks="processedTasks" />
112
+ <ProfileView :profiles="processedTasks" />
104
113
 
105
114
  <!-- Modal -->
106
- <transition-group name="fade" mode="out-in">
115
+ <transition-group name="fade">
107
116
  <CreateProfile v-if="activeModal === 'create-profile'" />
108
117
  </transition-group>
109
118
  </div>
@@ -112,18 +121,94 @@
112
121
  .custom-dropdown-content {
113
122
  top: 2.6rem !important;
114
123
  left: -13px;
115
- @apply border border-light-300;
124
+ @apply border border-dark-650;
125
+ }
126
+
127
+ /* Unified search component group */
128
+ .unified-search-group {
129
+ border: 2px solid oklch(0.2809 0 0);
130
+ border-radius: 0.5rem;
131
+ overflow: hidden;
132
+ background: oklch(0.2603 0 0);
133
+ transition: all 0.15s ease;
134
+ display: flex;
135
+
136
+ :deep(.tag-toggle),
137
+ :deep(.dropdown),
138
+ input {
139
+ border: none !important;
140
+ border-width: 0 !important;
141
+ border-radius: 0 !important;
142
+ height: 40px !important;
143
+ background: transparent !important;
144
+ box-shadow: none !important;
145
+ min-width: fit-content !important;
146
+ }
147
+
148
+ :deep(.tag-toggle) {
149
+ padding: 0;
150
+ border: 0 solid transparent !important;
151
+ border-top: 0 !important;
152
+ border-bottom: 0 !important;
153
+ border-left: 0 !important;
154
+ border-right: 0 !important;
155
+ }
156
+
157
+ :deep(.tag-toggle button) {
158
+ font-size: 0.875rem;
159
+ padding: 0.5rem 0.75rem;
160
+ min-width: fit-content;
161
+ border: 0 solid transparent !important;
162
+ border-top: 0 !important;
163
+ border-bottom: 0 !important;
164
+ border-left: 0 !important;
165
+ border-right: 0 !important;
166
+ }
167
+
168
+ :deep(.dropdown) {
169
+ width: 120px !important;
170
+ min-width: 120px !important;
171
+ }
172
+
173
+ :deep(.dropdown-display) {
174
+ padding: 0 0.75rem;
175
+ font-size: 0.875rem;
176
+ }
177
+
178
+ input {
179
+ padding-left: 0.75rem;
180
+ padding-right: 0.75rem;
181
+ flex: 1;
182
+
183
+ &::placeholder {
184
+ color: oklch(0.50 0 0);
185
+ }
186
+
187
+ &:focus {
188
+ outline: none !important;
189
+ }
190
+ }
191
+
192
+ &:hover {
193
+ border-color: oklch(0.30 0 0);
194
+ }
195
+
196
+ &:focus-within {
197
+ border-color: oklch(0.72 0.15 145);
198
+ outline: 1px solid oklch(0.72 0.15 145);
199
+ outline-offset: 0;
200
+ }
116
201
  }
117
202
  </style>
118
203
  <script setup>
119
204
  import { computed, ref, watch } from "vue";
120
- import ProfileView from "@/components/editors/Profile/ProfileView.vue";
121
- import CreateProfile from "@/components/editors/Profile/CreateProfile.vue";
205
+ import ProfileView from "@/components/Editors/Profile/ProfileView.vue";
206
+ import CreateProfile from "@/components/Editors/Profile/CreateProfile.vue";
122
207
  import { useUIStore } from "@/stores/ui";
123
- import { PlusIcon } from "@/components/icons";
208
+ import { PlusIcon, GroupIcon, CloseXIcon, CheckIcon } from "@/components/icons";
124
209
  import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
125
210
  import EyeToggle from "@/components/ui/controls/EyeToggle.vue";
126
- import TagToggle from "@/components/editors/TagToggle.vue";
211
+ import TagToggle from "@/components/Editors/TagToggle.vue";
127
212
  import Switch from "@/components/ui/controls/atomic/Switch.vue";
128
213
 
129
214
  const ui = useUIStore();