@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.
- 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 +78 -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/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 +201 -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 +62 -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 -79
- package/src/views/Editor.vue +1176 -123
- package/src/views/FilterBuilder.vue +528 -250
- package/src/views/Login.vue +76 -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
package/src/views/Login.vue
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="
|
|
3
|
-
<div class="
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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>
|
package/src/views/Profiles.vue
CHANGED
|
@@ -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
|
-
<
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
|
|
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
|
|
23
|
-
|
|
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
|
|
28
|
-
|
|
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
|
|
47
|
+
<div class="unified-search-group sm:w-auto w-full flex items-center justify-start">
|
|
36
48
|
<TagToggle
|
|
37
|
-
class="smooth-hover
|
|
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
|
|
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="
|
|
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="
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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 :
|
|
112
|
+
<ProfileView :profiles="processedTasks" />
|
|
104
113
|
|
|
105
114
|
<!-- Modal -->
|
|
106
|
-
<transition-group name="fade"
|
|
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-
|
|
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/
|
|
121
|
-
import CreateProfile from "@/components/
|
|
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/
|
|
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();
|