@necrolab/dashboard 0.4.38 → 0.4.39
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 +3 -1
- package/backend/api.js +20 -16
- package/backend/auth.js +2 -2
- package/backend/batching.js +1 -1
- package/backend/endpoints.js +5 -5
- package/backend/index.js +2 -2
- package/backend/mock-data.js +19 -20
- package/backend/mock-src/classes/logger.js +5 -7
- package/backend/mock-src/classes/utils.js +3 -2
- package/backend/mock-src/ticketmaster.js +2 -2
- package/backend/validator.js +2 -2
- package/dev-server.js +49 -0
- package/index.html +1 -1
- package/index.js +1 -1
- package/package.json +6 -5
- package/postcss.config.js +1 -1
- package/postinstall.js +5 -3
- 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/manifest.json +4 -4
- package/src/App.vue +471 -49
- package/src/assets/css/_input.scss +25 -25
- package/src/assets/css/main.scss +116 -22
- package/src/assets/img/android-chrome-192x192.png +0 -0
- package/src/assets/img/logo_icon-old.png +0 -0
- package/src/assets/img/logo_icon.png +0 -0
- package/src/components/Editors/Account/Account.vue +19 -19
- package/src/components/Editors/Account/AccountCreator.vue +3 -3
- package/src/components/Editors/Account/AccountView.vue +17 -6
- package/src/components/Editors/Profile/Profile.vue +24 -24
- package/src/components/Editors/Profile/ProfileView.vue +22 -9
- package/src/components/Editors/TagLabel.vue +6 -7
- package/src/components/Table/Table.vue +15 -0
- package/src/components/Tasks/Controls/DesktopControls.vue +1 -1
- package/src/components/Tasks/CreateTaskAXS.vue +15 -15
- package/src/components/Tasks/CreateTaskTM.vue +5 -4
- package/src/components/Tasks/Task.vue +23 -35
- package/src/components/Tasks/TaskView.vue +19 -18
- package/src/components/Tasks/Utilities.vue +1 -1
- package/src/components/icons/Mail.vue +2 -2
- package/src/components/ui/Modal.vue +84 -15
- package/src/components/ui/Navbar.vue +118 -39
- package/src/components/ui/controls/atomic/Dropdown.vue +23 -3
- package/src/components/ui/controls/atomic/MultiDropdown.vue +43 -23
- package/src/stores/sampleData.js +5 -4
- package/src/stores/ui.js +3 -3
- package/src/views/Accounts.vue +2 -2
- package/src/views/Console.vue +78 -30
- package/src/views/Editor.vue +175 -24
- package/src/views/FilterBuilder.vue +21 -7
- package/src/views/Profiles.vue +8 -8
- package/src/views/Tasks.vue +51 -2
- package/tailwind.config.js +1 -1
- package/vite.config.js +8 -1
- package/vue.config.js +1 -1
- package/{workbox-config.js → workbox-config.cjs} +1 -4
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
.input-default {
|
|
2
2
|
@apply h-12 bg-dark-500 flex items-center bg-clip-padding rounded-lg relative box-border border-dark-550 border-2;
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
input {
|
|
5
5
|
@apply h-full w-full px-4 focus:outline-none text-xs text-white;
|
|
6
6
|
background-color: transparent;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
/* When input has incrementer, add right padding */
|
|
10
10
|
&:has(.input-incrementer) input {
|
|
11
11
|
@apply pr-10;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
/* Required field indicator */
|
|
15
15
|
&.required {
|
|
16
16
|
/* Professional style with colored border */
|
|
17
17
|
border-left: 3px solid rgba(239, 68, 68, 0.7);
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
/* Red bullet indicator directly in the field */
|
|
20
20
|
&::after {
|
|
21
21
|
content: "";
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
border-radius: 50%;
|
|
29
29
|
background-color: #ef4444;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
&:has(.input-incrementer)::after {
|
|
33
33
|
right: 16px;
|
|
34
34
|
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
}
|
|
37
37
|
.input-wrapper {
|
|
38
38
|
@apply z-20;
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
label {
|
|
41
41
|
@apply text-xs text-light-300 block;
|
|
42
42
|
}
|
|
@@ -51,7 +51,7 @@ input[type="number"] {
|
|
|
51
51
|
-webkit-appearance: textfield;
|
|
52
52
|
-moz-appearance: textfield;
|
|
53
53
|
appearance: textfield;
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
&::-webkit-inner-spin-button,
|
|
56
56
|
&::-webkit-outer-spin-button {
|
|
57
57
|
-webkit-appearance: none;
|
|
@@ -61,24 +61,24 @@ input[type="number"] {
|
|
|
61
61
|
.input-incrementer {
|
|
62
62
|
@apply flex flex-col absolute right-2 top-1/2 transform -translate-y-1/2 #{!important};
|
|
63
63
|
gap: 2px;
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
button {
|
|
66
66
|
@apply w-6 h-4 flex items-center justify-center transition-all duration-150 rounded-sm;
|
|
67
67
|
background: rgba(46, 47, 52, 0.8);
|
|
68
68
|
border: 1px solid rgba(61, 62, 68, 0.6);
|
|
69
69
|
color: rgba(255, 255, 255, 0.9);
|
|
70
70
|
font-size: 8px;
|
|
71
|
-
|
|
71
|
+
|
|
72
72
|
&:hover {
|
|
73
73
|
background: rgba(68, 69, 75, 0.9);
|
|
74
|
-
border-color: rgba(
|
|
74
|
+
border-color: rgba(255, 255, 255, 0.4);
|
|
75
75
|
color: white;
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
&:active {
|
|
79
79
|
background: rgba(35, 36, 41, 0.9);
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
svg {
|
|
83
83
|
@apply w-2.5 h-2.5;
|
|
84
84
|
}
|
|
@@ -89,33 +89,33 @@ input[type="number"] {
|
|
|
89
89
|
@media (max-width: 810px) {
|
|
90
90
|
.input-default {
|
|
91
91
|
height: 40px;
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
input {
|
|
94
94
|
font-size: 12px;
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
.input-incrementer button {
|
|
98
98
|
@apply w-5 h-3;
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
svg {
|
|
101
101
|
@apply w-2 h-2;
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
-
|
|
105
|
+
|
|
106
106
|
.input-wrapper label {
|
|
107
107
|
font-size: 15px;
|
|
108
108
|
}
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
.ant-select {
|
|
111
111
|
height: fit-content;
|
|
112
112
|
min-height: 40px;
|
|
113
113
|
padding: 0;
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
&-show-search:not(.ant-select-customize-input) .ant-select-selector {
|
|
116
116
|
font-size: 12px;
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
&-multiple .ant-select-selection-item {
|
|
120
120
|
height: 25px;
|
|
121
121
|
}
|
|
@@ -132,7 +132,7 @@ input[type="number"] {
|
|
|
132
132
|
@apply bg-dark-500 flex items-center bg-clip-padding rounded-lg relative box-border px-1 py-1 border-dark-550 border-2 #{!important};
|
|
133
133
|
min-height: 3.45em;
|
|
134
134
|
height: fit-content;
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
.ant-select-selector {
|
|
137
137
|
@apply h-full w-full focus:outline-none text-xs text-white #{!important};
|
|
138
138
|
background: transparent;
|
|
@@ -150,7 +150,7 @@ input[type="number"] {
|
|
|
150
150
|
border-radius: 10px;
|
|
151
151
|
height: 40px;
|
|
152
152
|
border: 0;
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
&-remove > .anticon {
|
|
155
155
|
vertical-align: 0.05rem;
|
|
156
156
|
}
|
|
@@ -167,20 +167,20 @@ input[type="number"] {
|
|
|
167
167
|
.ant-select-item-option {
|
|
168
168
|
&-selected:not(.ant-select-item-option-disabled) {
|
|
169
169
|
@apply bg-dark-500 text-white #{!important};
|
|
170
|
-
|
|
170
|
+
|
|
171
171
|
.ant-select-item-option-state {
|
|
172
172
|
@apply text-white #{!important};
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
svg {
|
|
175
175
|
margin-top: -1.5px;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
|
|
179
|
+
|
|
180
180
|
&-active:not(.ant-select-item-option-disabled) {
|
|
181
181
|
background-color: transparent;
|
|
182
182
|
}
|
|
183
|
-
|
|
183
|
+
|
|
184
184
|
&-content {
|
|
185
185
|
@apply text-white #{!important};
|
|
186
186
|
}
|
package/src/assets/css/main.scss
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
@use "input";
|
|
2
2
|
|
|
3
3
|
/* Global input styling fixes for iOS and other platforms */
|
|
4
|
-
input,
|
|
4
|
+
input,
|
|
5
|
+
textarea,
|
|
6
|
+
select,
|
|
7
|
+
button {
|
|
5
8
|
/* Remove iOS blue highlight/border */
|
|
6
9
|
-webkit-tap-highlight-color: transparent;
|
|
7
10
|
-webkit-touch-callout: none;
|
|
8
|
-
|
|
11
|
+
|
|
9
12
|
/* Remove default focus outline */
|
|
10
13
|
outline: none;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
input,
|
|
16
|
+
input,
|
|
17
|
+
textarea,
|
|
18
|
+
select {
|
|
14
19
|
/* Remove browser default styling */
|
|
15
20
|
-webkit-appearance: none;
|
|
16
21
|
-moz-appearance: none;
|
|
@@ -18,15 +23,20 @@ input, textarea, select {
|
|
|
18
23
|
}
|
|
19
24
|
|
|
20
25
|
/* Enhanced focus state removal for iOS */
|
|
21
|
-
input:focus,
|
|
26
|
+
input:focus,
|
|
27
|
+
textarea:focus,
|
|
28
|
+
select:focus {
|
|
22
29
|
outline: none !important;
|
|
23
30
|
-webkit-tap-highlight-color: transparent !important;
|
|
24
31
|
box-shadow: none !important;
|
|
25
32
|
}
|
|
26
33
|
|
|
27
|
-
// Base styles
|
|
34
|
+
// Base styles - Ultra bulletproof scroll prevention
|
|
28
35
|
html {
|
|
29
|
-
|
|
36
|
+
overflow: hidden !important;
|
|
37
|
+
overscroll-behavior: none !important;
|
|
38
|
+
height: 100% !important;
|
|
39
|
+
width: 100% !important;
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
* {
|
|
@@ -35,6 +45,49 @@ html {
|
|
|
35
45
|
-moz-user-select: none;
|
|
36
46
|
-ms-user-select: none;
|
|
37
47
|
user-select: none;
|
|
48
|
+
overscroll-behavior: none !important;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Override for textareas to allow scrolling and selection
|
|
52
|
+
textarea,
|
|
53
|
+
.code-editor,
|
|
54
|
+
.proxy-editor {
|
|
55
|
+
-webkit-user-select: text !important;
|
|
56
|
+
-moz-user-select: text !important;
|
|
57
|
+
-ms-user-select: text !important;
|
|
58
|
+
user-select: text !important;
|
|
59
|
+
overscroll-behavior: auto !important;
|
|
60
|
+
touch-action: pan-y !important;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Override for dropdown menus to allow scrolling - must be very specific to override global rules
|
|
64
|
+
.dropdown-menu,
|
|
65
|
+
.dropdown-menu *,
|
|
66
|
+
.option-list,
|
|
67
|
+
.option-list *,
|
|
68
|
+
.dropdown-menu.scrollable,
|
|
69
|
+
.dropdown-menu.scrollable * {
|
|
70
|
+
overscroll-behavior: auto !important;
|
|
71
|
+
touch-action: pan-y !important;
|
|
72
|
+
-webkit-overflow-scrolling: touch !important;
|
|
73
|
+
overflow-y: auto !important;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Additional specific overrides for dropdown buttons and text
|
|
77
|
+
.dropdown-item,
|
|
78
|
+
.dropdown-item *,
|
|
79
|
+
.dropdown-item-text {
|
|
80
|
+
overscroll-behavior: auto !important;
|
|
81
|
+
touch-action: pan-y !important;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Override for console scrolling
|
|
85
|
+
.console,
|
|
86
|
+
.console *,
|
|
87
|
+
.console.scrollable {
|
|
88
|
+
overscroll-behavior: auto !important;
|
|
89
|
+
touch-action: pan-y !important;
|
|
90
|
+
-webkit-overflow-scrolling: touch !important;
|
|
38
91
|
}
|
|
39
92
|
|
|
40
93
|
body {
|
|
@@ -43,11 +96,13 @@ body {
|
|
|
43
96
|
background-size: cover;
|
|
44
97
|
background-attachment: fixed;
|
|
45
98
|
min-height: 100vh;
|
|
46
|
-
|
|
47
|
-
overscroll-behavior
|
|
99
|
+
overflow: hidden !important;
|
|
100
|
+
overscroll-behavior: none !important;
|
|
101
|
+
width: 100% !important;
|
|
102
|
+
height: 100% !important;
|
|
48
103
|
-webkit-font-smoothing: antialiased;
|
|
49
104
|
-moz-osx-font-smoothing: grayscale;
|
|
50
|
-
touch-action:
|
|
105
|
+
touch-action: none !important;
|
|
51
106
|
color: #e2e2e5;
|
|
52
107
|
@apply bg-dark-300;
|
|
53
108
|
}
|
|
@@ -89,7 +144,7 @@ img {
|
|
|
89
144
|
.btn-primary {
|
|
90
145
|
@apply bg-accent-blue hover:bg-opacity-80 text-white font-medium px-4 py-2 rounded transition-all duration-150;
|
|
91
146
|
border: 1px solid #5d7cc0;
|
|
92
|
-
|
|
147
|
+
|
|
93
148
|
&:hover {
|
|
94
149
|
border-color: #4a6ba0;
|
|
95
150
|
}
|
|
@@ -108,7 +163,7 @@ img {
|
|
|
108
163
|
.btn-icon {
|
|
109
164
|
@apply p-1 rounded transition-all duration-150 flex-center hover:bg-dark-500 border border-transparent;
|
|
110
165
|
color: #d0d0d3;
|
|
111
|
-
|
|
166
|
+
|
|
112
167
|
&:hover {
|
|
113
168
|
color: #ffffff;
|
|
114
169
|
border-color: #3d3e44;
|
|
@@ -128,7 +183,7 @@ img {
|
|
|
128
183
|
.label-override {
|
|
129
184
|
@apply flex items-center text-xs mb-2;
|
|
130
185
|
color: #a0a0a6;
|
|
131
|
-
|
|
186
|
+
|
|
132
187
|
svg {
|
|
133
188
|
@apply ml-2;
|
|
134
189
|
color: #a0a0a6 !important;
|
|
@@ -175,17 +230,32 @@ img {
|
|
|
175
230
|
}
|
|
176
231
|
|
|
177
232
|
.status-indicator {
|
|
178
|
-
@apply w-2 h-2 rounded-full;
|
|
233
|
+
@apply w-2 h-2 rounded-full flex-shrink-0;
|
|
234
|
+
min-width: 4px;
|
|
235
|
+
min-height: 4px;
|
|
236
|
+
|
|
237
|
+
@media (max-width: 768px) {
|
|
238
|
+
width: 6px;
|
|
239
|
+
height: 6px;
|
|
240
|
+
min-width: 6px;
|
|
241
|
+
min-height: 6px;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
@media (max-width: 480px) {
|
|
245
|
+
width: 5px;
|
|
246
|
+
height: 5px;
|
|
247
|
+
min-width: 5px;
|
|
248
|
+
min-height: 5px;
|
|
249
|
+
}
|
|
179
250
|
}
|
|
180
251
|
|
|
181
|
-
|
|
182
252
|
.mobile-icons {
|
|
183
253
|
@apply flex lg:hidden ml-auto items-center gap-x-2;
|
|
184
|
-
|
|
254
|
+
|
|
185
255
|
button {
|
|
186
256
|
@apply w-8 h-8 flex-center bg-dark-500 rounded transition-all duration-150 border border-dark-650 hover:bg-dark-550;
|
|
187
257
|
color: #d0d0d3;
|
|
188
|
-
|
|
258
|
+
|
|
189
259
|
&:hover {
|
|
190
260
|
color: #ffffff;
|
|
191
261
|
}
|
|
@@ -214,7 +284,7 @@ img {
|
|
|
214
284
|
.hidden-scrollbars {
|
|
215
285
|
scrollbar-width: none;
|
|
216
286
|
-ms-overflow-style: none;
|
|
217
|
-
|
|
287
|
+
|
|
218
288
|
&::-webkit-scrollbar {
|
|
219
289
|
display: none;
|
|
220
290
|
}
|
|
@@ -266,6 +336,15 @@ img {
|
|
|
266
336
|
--toastify-toast-width: 520px;
|
|
267
337
|
}
|
|
268
338
|
|
|
339
|
+
// iOS layout stabilization
|
|
340
|
+
@supports (-webkit-appearance: none) {
|
|
341
|
+
.component-container,
|
|
342
|
+
.card-dark,
|
|
343
|
+
h1, h2, h3, h4, h5, h6 {
|
|
344
|
+
transform: translate3d(0, 0, 0);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
269
348
|
// Toast notifications
|
|
270
349
|
.Toastify__toast-theme--colored.Toastify__toast--default,
|
|
271
350
|
.Toastify__toast-theme--light {
|
|
@@ -294,13 +373,14 @@ img {
|
|
|
294
373
|
.Toastify__toast {
|
|
295
374
|
min-height: 50px !important;
|
|
296
375
|
height: 50px !important;
|
|
297
|
-
|
|
376
|
+
pointer-events: none !important;
|
|
377
|
+
|
|
298
378
|
&-body > div:last-child {
|
|
299
379
|
font-family: "Inter", sans-serif;
|
|
300
380
|
@apply font-medium;
|
|
301
381
|
}
|
|
302
|
-
|
|
303
|
-
&--error {
|
|
382
|
+
|
|
383
|
+
&--error {
|
|
304
384
|
.Toastify__progress-bar {
|
|
305
385
|
@apply bg-red-400;
|
|
306
386
|
}
|
|
@@ -328,13 +408,27 @@ img {
|
|
|
328
408
|
.text-heading {
|
|
329
409
|
@apply text-sm;
|
|
330
410
|
}
|
|
331
|
-
|
|
411
|
+
|
|
332
412
|
.btn-primary,
|
|
333
413
|
.btn-secondary {
|
|
334
414
|
@apply text-sm px-3 py-1.5;
|
|
335
415
|
}
|
|
336
|
-
|
|
416
|
+
|
|
417
|
+
.btn-action {
|
|
418
|
+
@apply text-sm px-6 h-12;
|
|
419
|
+
min-height: 48px; // Apple's recommended minimum touch target size
|
|
420
|
+
}
|
|
421
|
+
|
|
337
422
|
.form-grid {
|
|
338
423
|
@apply grid-cols-1;
|
|
339
424
|
}
|
|
340
425
|
}
|
|
426
|
+
|
|
427
|
+
// iPhone landscape mode - larger buttons for easier touch
|
|
428
|
+
@media only screen and (max-device-width: 430px) and (orientation: landscape) {
|
|
429
|
+
.btn-action {
|
|
430
|
+
@apply text-base px-8 h-14;
|
|
431
|
+
min-height: 56px; // Extra large for landscape touch
|
|
432
|
+
font-weight: 600;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -7,20 +7,20 @@
|
|
|
7
7
|
<div class="col-span-3 lg:col-span-2 flex">
|
|
8
8
|
<Checkbox
|
|
9
9
|
class="ml-0 mr-4"
|
|
10
|
-
:toggled="props.
|
|
11
|
-
@valueUpdate="ui.toggleAccountSelected(props.
|
|
10
|
+
:toggled="props.account.selected"
|
|
11
|
+
@valueUpdate="ui.toggleAccountSelected(props.account._id)"
|
|
12
12
|
/>
|
|
13
|
-
<h4 class="mx-auto text-white" @click="copy(props.
|
|
14
|
-
{{ props.
|
|
13
|
+
<h4 class="mx-auto text-white" @click="copy(props.account.email)">
|
|
14
|
+
{{ props.account.email }}
|
|
15
15
|
</h4>
|
|
16
16
|
</div>
|
|
17
|
-
<div class="col-span-2 hidden ipadlg:block" @click="copy(props.
|
|
17
|
+
<div class="col-span-2 hidden ipadlg:block" @click="copy(props.account.password)">
|
|
18
18
|
<h4 class="text-white">
|
|
19
|
-
{{ props.
|
|
19
|
+
{{ props.account.privacy ? "•".repeat(props.account.password.length) : props.account.password }}
|
|
20
20
|
</h4>
|
|
21
21
|
</div>
|
|
22
22
|
<div class="col-span-1">
|
|
23
|
-
<h4 v-if="props.
|
|
23
|
+
<h4 v-if="props.account.enabled" class="text-green-400 flex justify-center">
|
|
24
24
|
<img class="w-3 h-3 green" src="/img/controls/enable.svg" />
|
|
25
25
|
</h4>
|
|
26
26
|
<h4 v-else class="text-red-400 flex justify-center">
|
|
@@ -30,18 +30,18 @@
|
|
|
30
30
|
|
|
31
31
|
<div class="col-span-1 hidden lg:block">
|
|
32
32
|
<h4 class="text-white flex justify-center gap-1">
|
|
33
|
-
<TagLabel v-for="tag in props.
|
|
33
|
+
<TagLabel v-for="tag in props.account.tags" :key="tag" :text="tag" />
|
|
34
34
|
</h4>
|
|
35
35
|
</div>
|
|
36
36
|
|
|
37
37
|
<div class="col-span-1 flex">
|
|
38
|
-
<ul class="
|
|
38
|
+
<ul class="account-buttons">
|
|
39
39
|
<li>
|
|
40
40
|
<button @click="edit">
|
|
41
41
|
<EditIcon />
|
|
42
42
|
</button>
|
|
43
43
|
</li>
|
|
44
|
-
<li v-if="props.
|
|
44
|
+
<li v-if="props.account.enabled">
|
|
45
45
|
<button @click="disable">
|
|
46
46
|
<img class="w-4 h-4" src="/img/controls/disable.svg" />
|
|
47
47
|
</button>
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
h4 {
|
|
60
60
|
@apply text-center;
|
|
61
61
|
}
|
|
62
|
-
.
|
|
62
|
+
.account-buttons {
|
|
63
63
|
@apply flex items-center justify-center mx-auto bg-dark-500 border border-dark-650 rounded;
|
|
64
64
|
padding: 3px;
|
|
65
65
|
gap: 2px;
|
|
@@ -102,7 +102,7 @@ h4 {
|
|
|
102
102
|
font-size: 10px !important;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
.
|
|
105
|
+
.account-buttons {
|
|
106
106
|
padding: 3px;
|
|
107
107
|
gap: 2px;
|
|
108
108
|
|
|
@@ -118,7 +118,7 @@ h4 {
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
.
|
|
121
|
+
.account-id {
|
|
122
122
|
font-size: 6px !important;
|
|
123
123
|
margin-right: -12px;
|
|
124
124
|
margin-top: 20px;
|
|
@@ -127,7 +127,7 @@ h4 {
|
|
|
127
127
|
|
|
128
128
|
// Mobile optimization
|
|
129
129
|
@media (max-width: 768px) {
|
|
130
|
-
.
|
|
130
|
+
.account-buttons {
|
|
131
131
|
padding: 2px;
|
|
132
132
|
gap: 1px;
|
|
133
133
|
|
|
@@ -146,7 +146,7 @@ h4 {
|
|
|
146
146
|
|
|
147
147
|
// iPhone vertical (portrait) specific
|
|
148
148
|
@media (max-width: 480px) and (orientation: portrait) {
|
|
149
|
-
.
|
|
149
|
+
.account-buttons {
|
|
150
150
|
padding: 2px;
|
|
151
151
|
gap: 1px;
|
|
152
152
|
|
|
@@ -177,7 +177,7 @@ import TagLabel from "@/components/Editors/TagLabel.vue";
|
|
|
177
177
|
const ui = useUIStore();
|
|
178
178
|
|
|
179
179
|
const props = defineProps({
|
|
180
|
-
|
|
180
|
+
account: { type: Object }
|
|
181
181
|
});
|
|
182
182
|
|
|
183
183
|
const copy = (txt) => {
|
|
@@ -185,10 +185,10 @@ const copy = (txt) => {
|
|
|
185
185
|
navigator.clipboard.writeText(txt);
|
|
186
186
|
ui.showSuccess("Copied text");
|
|
187
187
|
};
|
|
188
|
-
const enable = async () => await ui.addAccount({ ...props.
|
|
189
|
-
const disable = async () => await ui.addAccount({ ...props.
|
|
188
|
+
const enable = async () => await ui.addAccount({ ...props.account, enabled: true });
|
|
189
|
+
const disable = async () => await ui.addAccount({ ...props.account, enabled: false });
|
|
190
190
|
const edit = () => {
|
|
191
|
-
ui.currentlyEditing = props.
|
|
191
|
+
ui.currentlyEditing = props.account;
|
|
192
192
|
ui.toggleModal("create-account");
|
|
193
193
|
};
|
|
194
194
|
</script>
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
v-model="creatorConfig.emails"
|
|
49
49
|
class="proxy-editor"
|
|
50
50
|
spellcheck="false"
|
|
51
|
-
style="max-height: 250px; min-height: 150px
|
|
51
|
+
style="max-height: 250px; min-height: 150px"
|
|
52
52
|
></textarea>
|
|
53
53
|
</div>
|
|
54
54
|
</div>
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
width: 100%;
|
|
84
84
|
background-color: #2e2f34;
|
|
85
85
|
color: #e2e2e5;
|
|
86
|
-
font-family:
|
|
86
|
+
font-family: "JetBrains Mono", "Fira Code", "Menlo", "Monaco", "Courier New", monospace;
|
|
87
87
|
padding: 12px;
|
|
88
88
|
border: none;
|
|
89
89
|
resize: none;
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
|
|
99
99
|
.proxy-editor:focus {
|
|
100
100
|
border-color: #5d7cc0;
|
|
101
|
-
box-shadow: 0 0 0 2px rgba(
|
|
101
|
+
box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.4);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
.z-inf {
|
|
@@ -48,8 +48,10 @@
|
|
|
48
48
|
</template>
|
|
49
49
|
</RecycleScroller>
|
|
50
50
|
</div>
|
|
51
|
-
<div v-else class="flex justify-center py-8 bg-dark-400 empty-state">
|
|
52
|
-
|
|
51
|
+
<div v-else class="flex flex-col items-center justify-center py-8 bg-dark-400 empty-state text-center">
|
|
52
|
+
<MailIcon class="w-12 h-12 text-dark-400 mb-3 opacity-50" />
|
|
53
|
+
<p class="text-light-400 text-sm">No accounts found</p>
|
|
54
|
+
<p class="text-light-500 text-xs mt-1">Create accounts to get started</p>
|
|
53
55
|
</div>
|
|
54
56
|
</Table>
|
|
55
57
|
</template>
|
|
@@ -73,22 +75,31 @@ h4 {
|
|
|
73
75
|
</style>
|
|
74
76
|
<script setup>
|
|
75
77
|
import { Table, Header } from "@/components/Table";
|
|
76
|
-
import {
|
|
78
|
+
import {
|
|
79
|
+
EventIcon,
|
|
80
|
+
TicketIcon,
|
|
81
|
+
StatusIcon,
|
|
82
|
+
ClickIcon,
|
|
83
|
+
DownIcon,
|
|
84
|
+
MailIcon,
|
|
85
|
+
KeyIcon,
|
|
86
|
+
CheckmarkIcon
|
|
87
|
+
} from "@/components/icons";
|
|
77
88
|
import Account from "./Account.vue";
|
|
78
89
|
import Checkbox from "@/components/ui/controls/atomic/Checkbox.vue";
|
|
79
90
|
import { useUIStore } from "@/stores/ui";
|
|
80
91
|
import { computed, ref } from "vue";
|
|
81
92
|
|
|
82
93
|
const props = defineProps({
|
|
83
|
-
|
|
94
|
+
accounts: { type: Object }
|
|
84
95
|
});
|
|
85
96
|
const i = ref({});
|
|
86
|
-
props.
|
|
97
|
+
props.accounts.forEach((t) => (i.value[t._id] = 0));
|
|
87
98
|
|
|
88
99
|
const ui = useUIStore();
|
|
89
100
|
|
|
90
101
|
const toRender = computed(() => {
|
|
91
102
|
let c = 0;
|
|
92
|
-
return props.
|
|
103
|
+
return props.accounts.map((t) => ({ ...t, index: c++ }));
|
|
93
104
|
});
|
|
94
105
|
</script>
|