@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.
- package/.prettierrc +1 -27
- package/.vscode/extensions.json +1 -1
- package/README.md +79 -43
- package/backend/api.js +48 -40
- package/backend/auth.js +3 -3
- package/backend/batching.js +1 -1
- package/backend/endpoints.js +77 -13
- package/backend/index.js +2 -2
- package/backend/mock-data.js +38 -29
- package/backend/mock-src/classes/logger.js +8 -8
- package/backend/mock-src/classes/utils.js +3 -7
- package/backend/mock-src/database.js +0 -0
- package/backend/mock-src/ticketmaster.js +79 -79
- package/backend/validator.js +2 -2
- package/config/configs.json +3 -2
- package/config/filter.json +3 -2
- package/index.html +10 -81
- package/index.js +1 -1
- package/package.json +25 -40
- package/postcss.config.js +1 -1
- package/postinstall.js +17 -98
- 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 +7 -12
- package/public/sw.js +2 -0
- package/public/workbox-49fdaf31.js +2 -0
- package/public/workbox-49fdaf31.js.map +1 -0
- package/public/workbox-88575b92.js +2 -0
- package/public/workbox-88575b92.js.map +1 -0
- package/public/workbox-a67a7b11.js +2 -0
- package/public/workbox-a67a7b11.js.map +1 -0
- package/public/workbox-d4314735.js +2 -0
- package/public/workbox-d4314735.js.map +1 -0
- package/public/workbox-e0f89ef3.js +2 -0
- package/public/workbox-e0f89ef3.js.map +1 -0
- package/run +9 -176
- package/src/App.vue +85 -498
- package/src/assets/css/_input.scss +99 -144
- package/src/assets/css/main.scss +99 -450
- package/src/assets/img/background.svg +2 -2
- package/src/assets/img/logo_icon.png +0 -0
- package/src/components/Auth/LoginForm.vue +11 -62
- package/src/components/Editors/Account/Account.vue +40 -116
- package/src/components/Editors/Account/AccountCreator.vue +39 -88
- package/src/components/Editors/Account/AccountView.vue +34 -102
- package/src/components/Editors/Account/CreateAccount.vue +32 -80
- package/src/components/Editors/Profile/CreateProfile.vue +83 -269
- package/src/components/Editors/Profile/Profile.vue +47 -132
- package/src/components/Editors/Profile/ProfileCountryChooser.vue +20 -82
- package/src/components/Editors/Profile/ProfileView.vue +34 -91
- package/src/components/Editors/TagLabel.vue +6 -67
- package/src/components/Filter/Filter.vue +72 -289
- package/src/components/Filter/FilterPreview.vue +30 -171
- package/src/components/Filter/PriceSortToggle.vue +4 -74
- package/src/components/Table/Header.vue +1 -1
- package/src/components/Table/Row.vue +1 -1
- package/src/components/Table/Table.vue +2 -19
- package/src/components/Tasks/CheckStock.vue +13 -28
- package/src/components/Tasks/Controls/DesktopControls.vue +17 -17
- package/src/components/Tasks/Controls/MobileControls.vue +45 -8
- package/src/components/Tasks/CreateTaskAXS.vue +73 -79
- package/src/components/Tasks/CreateTaskTM.vue +142 -94
- package/src/components/Tasks/MassEdit.vue +7 -9
- package/src/components/Tasks/QuickSettings.vue +55 -169
- package/src/components/Tasks/ScrapeVenue.vue +4 -7
- package/src/components/Tasks/Stats.vue +23 -52
- package/src/components/Tasks/Task.vue +136 -378
- package/src/components/Tasks/TaskView.vue +47 -107
- package/src/components/Tasks/Utilities.vue +6 -5
- package/src/components/icons/Bag.vue +1 -1
- package/src/components/icons/Loyalty.vue +1 -1
- package/src/components/icons/Mail.vue +2 -2
- package/src/components/icons/Play.vue +2 -2
- package/src/components/icons/Reload.vue +5 -4
- package/src/components/icons/Sandclock.vue +2 -2
- package/src/components/icons/Stadium.vue +1 -1
- package/src/components/icons/index.js +1 -24
- package/src/components/ui/Modal.vue +13 -105
- package/src/components/ui/Navbar.vue +38 -171
- package/src/components/ui/ReconnectIndicator.vue +55 -351
- package/src/components/ui/Splash.vue +35 -5
- package/src/components/ui/controls/CountryChooser.vue +62 -200
- package/src/components/ui/controls/atomic/Checkbox.vue +10 -119
- package/src/components/ui/controls/atomic/Dropdown.vue +39 -208
- package/src/components/ui/controls/atomic/MultiDropdown.vue +37 -300
- package/src/libs/Filter.js +170 -200
- package/src/registerServiceWorker.js +1 -1
- package/src/stores/connection.js +53 -51
- package/src/stores/logger.js +3 -11
- package/src/stores/sampleData.js +235 -207
- package/src/stores/ui.js +44 -112
- package/src/stores/utils.js +6 -90
- package/src/views/Accounts.vue +35 -44
- package/src/views/Console.vue +90 -341
- package/src/views/Editor.vue +123 -1176
- package/src/views/FilterBuilder.vue +251 -607
- package/src/views/Login.vue +14 -76
- package/src/views/Profiles.vue +25 -44
- package/src/views/Tasks.vue +100 -187
- package/static/offline.html +50 -192
- package/tailwind.config.js +26 -104
- package/vite.config.js +16 -73
- package/vue.config.js +32 -0
- package/workbox-config.js +11 -0
- package/artwork/image.png +0 -0
- package/dev-server.js +0 -136
- package/exit +0 -209
- package/jsconfig.json +0 -16
- package/src/assets/css/_utilities.scss +0 -388
- package/src/assets/img/background.svg.backup +0 -11
- package/src/components/icons/Check.vue +0 -5
- package/src/components/icons/Close.vue +0 -21
- package/src/components/icons/CloseX.vue +0 -5
- package/src/components/icons/Key.vue +0 -21
- package/src/components/icons/Pencil.vue +0 -21
- package/src/components/icons/Profile.vue +0 -18
- package/src/components/icons/Sell.vue +0 -21
- package/src/components/icons/Spinner.vue +0 -42
- package/src/components/icons/SquareCheck.vue +0 -18
- package/src/components/icons/SquareUncheck.vue +0 -18
- package/src/components/icons/Wildcard.vue +0 -18
- package/src/components/ui/controls/atomic/LoadingButton.vue +0 -45
- package/src/composables/useClickOutside.js +0 -21
- package/src/composables/useDropdownPosition.js +0 -174
- package/src/types/index.js +0 -41
- package/src/utils/debug.js +0 -1
- package/switch-branch.sh +0 -41
- package/workbox-config.cjs +0 -63
- /package/src/assets/img/{logo_icon-old.png → logo_icon_2.png} +0 -0
|
@@ -1,64 +1,58 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<Header class="
|
|
4
|
-
<div class="col-span-1
|
|
5
|
-
<Checkbox
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
:isHeader="true" />
|
|
10
|
-
<div class="mx-auto hidden items-center lg:flex" @click="ui.toggleSort('eventId')">
|
|
11
|
-
<EventIcon class="lg:mr-3" />
|
|
12
|
-
<h4 class="hidden lg:flex">Event</h4>
|
|
2
|
+
<Table>
|
|
3
|
+
<Header class="text-center">
|
|
4
|
+
<div class="col-span-1 lg:col-span-2 flex">
|
|
5
|
+
<Checkbox class="mr-3" :toggled="ui.mainCheckbox.tasks" @valueUpdate="ui.toggleMainCheckbox('tasks')" />
|
|
6
|
+
<div class="mx-auto hidden md:flex items-center" @click="ui.toggleSort('eventId')">
|
|
7
|
+
<EventIcon class="ipadlg:mr-3" />
|
|
8
|
+
<h4 class="hidden ipadlg:flex">Event</h4>
|
|
13
9
|
<DownIcon v-if="ui.sortData.sortBy === 'eventId' && !ui.sortData.reversed" class="ml-1" />
|
|
14
10
|
<UpIcon v-if="ui.sortData.sortBy === 'eventId' && ui.sortData.reversed" class="ml-1" />
|
|
15
11
|
</div>
|
|
16
12
|
</div>
|
|
17
|
-
<div class="
|
|
18
|
-
<
|
|
19
|
-
|
|
13
|
+
<div class="col-span-2 items-center justify-center hidden md:flex" v-once>
|
|
14
|
+
<CartIcon class="mr-0 ipadlg:mr-3" />
|
|
15
|
+
|
|
16
|
+
<h4 class="hidden ipadlg:flex">Quantity</h4>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="col-span-2 flex items-center justify-center" v-once>
|
|
19
|
+
<TicketIcon class="mr-0 ipadlg:mr-3" />
|
|
20
|
+
<h4 class="hidden ipadlg:flex">Tickets</h4>
|
|
20
21
|
</div>
|
|
21
|
-
<div
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
<div
|
|
23
|
+
class="col-span-6 md:col-span-4 lg:col-span-3 flex items-center justify-center"
|
|
24
|
+
@click="ui.toggleSort('status')"
|
|
25
|
+
>
|
|
26
|
+
<StatusIcon class="mr-0 ipadlg:mr-3" />
|
|
27
|
+
<h4 class="hidden ipadlg:flex">Status</h4>
|
|
24
28
|
<DownIcon v-if="ui.sortData.sortBy === 'status' && !ui.sortData.reversed" class="ml-1" />
|
|
25
29
|
<UpIcon v-if="ui.sortData.sortBy === 'status' && ui.sortData.reversed" class="ml-1" />
|
|
26
30
|
</div>
|
|
27
|
-
<div class="
|
|
28
|
-
<ClickIcon class="mr-0
|
|
29
|
-
<h4 class="hidden
|
|
31
|
+
<div class="col-span-2 flex items-center justify-center" v-once>
|
|
32
|
+
<ClickIcon class="mr-0 ipadlg:mr-3" />
|
|
33
|
+
<h4 class="hidden ipadlg:flex">Actions</h4>
|
|
30
34
|
</div>
|
|
31
|
-
<div class="absolute right-5
|
|
32
|
-
<h4 class="
|
|
35
|
+
<div class="absolute right-5 hidden md:flex items-center top-3,5" @click="ui.toggleSort('taskId')">
|
|
36
|
+
<h4 class="">ID</h4>
|
|
33
37
|
<DownIcon v-if="ui.sortData.sortBy === 'taskId' && !ui.sortData.reversed" class="ml-1" />
|
|
34
38
|
<UpIcon v-if="ui.sortData.sortBy === 'taskId' && ui.sortData.reversed" class="ml-1" />
|
|
35
39
|
</div>
|
|
36
40
|
</Header>
|
|
37
41
|
<div
|
|
38
|
-
class="
|
|
39
|
-
|
|
40
|
-
<div v-for="(task, i) in getTasksInOrder()" :key="
|
|
41
|
-
<Task :task="task" :class="i % 2 == 1 ? '
|
|
42
|
+
class="flex flex-col divide-y-2 divide-border overflow-y-auto hidden-scrollbars overflow-x-hidden stop-pan max-h-big tasks-table-height"
|
|
43
|
+
>
|
|
44
|
+
<div v-for="(task, i) in getTasksInOrder()" :key="i">
|
|
45
|
+
<Task :task="task" :class="[i % 2 == 1 ? 'bg-dark-500' : 'bg-dark-550']" />
|
|
42
46
|
</div>
|
|
43
47
|
<div
|
|
44
48
|
v-if="getTasksInOrder().length === 0"
|
|
45
|
-
class="
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
">
|
|
50
|
-
<TasksIcon class="mx-auto mb-3 h-12 w-12 text-dark-400 opacity-50" />
|
|
51
|
-
<p class="text-sm text-light-400">No tasks yet</p>
|
|
52
|
-
<p class="mt-1 text-xs text-light-500">Create tasks to get started</p>
|
|
53
|
-
</div>
|
|
54
|
-
<div v-else>
|
|
55
|
-
<TasksIcon class="mx-auto mb-3 h-12 w-12 text-dark-400 opacity-50" />
|
|
56
|
-
<p class="text-sm text-light-400">No tasks match current filters</p>
|
|
57
|
-
<p class="mt-1 text-xs text-light-500">Adjust filters to see tasks</p>
|
|
58
|
-
</div>
|
|
49
|
+
class="flex justify-center text-light-400 py-2 bg-dark-500 border-b-2 border-border"
|
|
50
|
+
>
|
|
51
|
+
<span v-if="ui.queueStats.total === 0"> No tasks yet.</span>
|
|
52
|
+
<span v-else>{{ ui.queueStats.total }} hidden task{{ ui.queueStats.total === 1 ? "" : "s" }}</span>
|
|
59
53
|
</div>
|
|
60
54
|
</div>
|
|
61
|
-
</
|
|
55
|
+
</Table>
|
|
62
56
|
</template>
|
|
63
57
|
<style lang="scss" scoped>
|
|
64
58
|
h4 {
|
|
@@ -69,35 +63,25 @@ h4 {
|
|
|
69
63
|
touch-action: pan-y pan-up pan-down;
|
|
70
64
|
}
|
|
71
65
|
|
|
72
|
-
.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
transition: background-color 0.15s ease;
|
|
76
|
-
|
|
77
|
-
&:hover {
|
|
78
|
-
@apply bg-dark-550 !important;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@media (max-width: 768px) {
|
|
82
|
-
min-height: 58px;
|
|
83
|
-
}
|
|
66
|
+
.tasks-table-height {
|
|
67
|
+
max-height: 33rem !important;
|
|
68
|
+
}
|
|
84
69
|
|
|
85
|
-
|
|
86
|
-
|
|
70
|
+
@media only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 2) {
|
|
71
|
+
.tasks-table-height {
|
|
72
|
+
max-height: 45vh !important;
|
|
87
73
|
}
|
|
88
74
|
}
|
|
89
75
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
font-weight: 500;
|
|
76
|
+
@media only screen and (min-device-width: 768px) and (max-device-width: 1366px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 2) {
|
|
77
|
+
.tasks-table-height {
|
|
78
|
+
max-height: 58vh !important;
|
|
79
|
+
}
|
|
95
80
|
}
|
|
96
81
|
</style>
|
|
97
82
|
<script setup>
|
|
98
|
-
import { computed, ref, onMounted, onUnmounted } from "vue";
|
|
99
83
|
import { Table, Header } from "@/components/Table";
|
|
100
|
-
import { EventIcon, TicketIcon, StatusIcon, ClickIcon, DownIcon, UpIcon
|
|
84
|
+
import { EventIcon, CartIcon, TicketIcon, StatusIcon, ClickIcon, DownIcon, UpIcon } from "@/components/icons";
|
|
101
85
|
import Task from "./Task.vue";
|
|
102
86
|
import Checkbox from "@/components/ui/controls/atomic/Checkbox.vue";
|
|
103
87
|
import { useUIStore } from "@/stores/ui";
|
|
@@ -108,7 +92,7 @@ const props = defineProps({
|
|
|
108
92
|
|
|
109
93
|
const shouldTaskShow = (task) => {
|
|
110
94
|
if (ui.taskFilter === "All") return true;
|
|
111
|
-
else if (ui.taskFilter === "Checkout") return task.expirationTime;
|
|
95
|
+
else if (ui.taskFilter === "Checkout") return task.expirationTime || task.noCartholds;
|
|
112
96
|
else return true;
|
|
113
97
|
};
|
|
114
98
|
|
|
@@ -139,48 +123,4 @@ const getTasksInOrder = () => {
|
|
|
139
123
|
});
|
|
140
124
|
return out;
|
|
141
125
|
};
|
|
142
|
-
|
|
143
|
-
// Dynamic height calculation to prevent page scrolling
|
|
144
|
-
const windowHeight = ref(window.innerHeight);
|
|
145
|
-
const windowWidth = ref(window.innerWidth);
|
|
146
|
-
|
|
147
|
-
const updateDimensions = () => {
|
|
148
|
-
windowHeight.value = window.innerHeight;
|
|
149
|
-
windowWidth.value = window.innerWidth;
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
onMounted(() => {
|
|
153
|
-
window.addEventListener("resize", updateDimensions);
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
onUnmounted(() => {
|
|
157
|
-
window.removeEventListener("resize", updateDimensions);
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
const dynamicTableHeight = computed(() => {
|
|
161
|
-
// Calculate available space for table
|
|
162
|
-
const headerHeight = 60; // Header + navbar
|
|
163
|
-
const titleHeight = 50; // Tasks title and mobile controls
|
|
164
|
-
const statsHeight = 50; // Queue stats
|
|
165
|
-
const controlsHeight = windowWidth.value >= 650 ? 60 : 0; // Desktop controls
|
|
166
|
-
const filtersHeight = 50; // Event dropdown and filter toggle
|
|
167
|
-
const utilitiesHeight = windowWidth.value <= 480 && windowHeight.value > windowWidth.value ? 150 : 200; // Reduce utilities height in mobile portrait
|
|
168
|
-
const margins =
|
|
169
|
-
windowWidth.value >= 1024 ? 40 : windowWidth.value <= 480 && windowHeight.value > windowWidth.value ? 15 : 20; // Reduce margins in mobile portrait
|
|
170
|
-
|
|
171
|
-
const totalUsedSpace =
|
|
172
|
-
headerHeight + titleHeight + statsHeight + controlsHeight + filtersHeight + utilitiesHeight + margins;
|
|
173
|
-
const availableHeight = windowHeight.value - totalUsedSpace;
|
|
174
|
-
|
|
175
|
-
// Calculate row height based on screen size
|
|
176
|
-
const rowHeight = windowWidth.value <= 768 ? 58 : 69; // Mobile vs desktop row height
|
|
177
|
-
const minRowsToShow = 2; // Always show at least 2 rows
|
|
178
|
-
const minHeight = minRowsToShow * rowHeight;
|
|
179
|
-
|
|
180
|
-
// Calculate how many complete rows can fit
|
|
181
|
-
const maxCompleteRows = Math.floor(Math.max(availableHeight, minHeight) / rowHeight) + 1;
|
|
182
|
-
const exactHeight = maxCompleteRows * rowHeight;
|
|
183
|
-
|
|
184
|
-
return exactHeight + "px";
|
|
185
|
-
});
|
|
186
126
|
</script>
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="grid grid-cols-1 gap-3 lg:grid-cols-1" v-
|
|
2
|
+
<div class="grid grid-cols-1 gap-3 lg:grid-cols-1" v-once>
|
|
3
3
|
<div class="lg:justify-self-end">
|
|
4
4
|
<h4 class="hidden lg:block text-white opacity-40 uppercase font-medium">Utils</h4>
|
|
5
|
-
<div class="flex gap-3
|
|
5
|
+
<div class="flex gap-3">
|
|
6
6
|
<button class="button-default active:opacity-50 w-44" @click="ui.toggleModal('scrape-venue')">
|
|
7
|
-
<ScrapeIcon />
|
|
7
|
+
<ScrapeIcon />
|
|
8
|
+
Scrape Venue
|
|
8
9
|
</button>
|
|
9
10
|
<button class="button-default w-44" @click="ui.toggleModal('check-stock')">
|
|
10
11
|
<BoxIcon />Check Stock
|
|
11
12
|
</button>
|
|
13
|
+
<!-- Mobile Label -->
|
|
12
14
|
</div>
|
|
13
15
|
<h4 class="text-white opacity-40 uppercase font-medium block lg:hidden">Utils</h4>
|
|
14
16
|
</div>
|
|
@@ -22,10 +24,9 @@ const ui = useUIStore();
|
|
|
22
24
|
</script>
|
|
23
25
|
<style lang="scss" scoped>
|
|
24
26
|
button {
|
|
25
|
-
@apply bg-dark-400 text-xs flex items-center justify-center gap-x-2 border border-dark-650 hover:border-dark-700;
|
|
26
27
|
height: 50px;
|
|
28
|
+
@apply bg-dark-400 text-xs flex items-center justify-center gap-x-2 hover:opacity-70;
|
|
27
29
|
}
|
|
28
|
-
|
|
29
30
|
h4 {
|
|
30
31
|
font-size: 12px;
|
|
31
32
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<svg width="15" height="18" viewBox="0 0 15 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
3
|
<path
|
|
4
4
|
d="M1.95833 17.4167C1.52292 17.4167 1.15004 17.2618 0.839708 16.952C0.529903 16.6416 0.375 16.2688 0.375 15.8334V6.33335C0.375 5.89794 0.529903 5.52533 0.839708 5.21552C1.15004 4.90519 1.52292 4.75002 1.95833 4.75002H3.54167C3.54167 3.65488 3.92774 2.72124 4.69988 1.9491C5.47149 1.17749 6.40486 0.791687 7.5 0.791687C8.59514 0.791687 9.52878 1.17749 10.3009 1.9491C11.0725 2.72124 11.4583 3.65488 11.4583 4.75002H13.0417C13.4771 4.75002 13.85 4.90519 14.1603 5.21552C14.4701 5.52533 14.625 5.89794 14.625 6.33335V15.8334C14.625 16.2688 14.4701 16.6416 14.1603 16.952C13.85 17.2618 13.4771 17.4167 13.0417 17.4167H1.95833ZM1.95833 15.8334H13.0417V6.33335H1.95833V15.8334ZM7.5 11.0834C8.59514 11.0834 9.52878 10.6973 10.3009 9.92515C11.0725 9.15353 11.4583 8.22016 11.4583 7.12502H9.875C9.875 7.78474 9.6441 8.34551 9.18229 8.80731C8.72049 9.26912 8.15972 9.50002 7.5 9.50002C6.84028 9.50002 6.27951 9.26912 5.81771 8.80731C5.3559 8.34551 5.125 7.78474 5.125 7.12502H3.54167C3.54167 8.22016 3.92774 9.15353 4.69988 9.92515C5.47149 10.6973 6.40486 11.0834 7.5 11.0834ZM5.125 4.75002H9.875C9.875 4.0903 9.6441 3.52953 9.18229 3.06773C8.72049 2.60592 8.15972 2.37502 7.5 2.37502C6.84028 2.37502 6.27951 2.60592 5.81771 3.06773C5.3559 3.52953 5.125 4.0903 5.125 4.75002Z"
|
|
5
|
-
fill="
|
|
5
|
+
fill="#6E7084"
|
|
6
6
|
/>
|
|
7
7
|
</svg>
|
|
8
8
|
</template>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
3
|
<path
|
|
4
4
|
d="M9.29168 12.854L12.0625 10.0831C12.2076 9.93799 12.3232 9.76646 12.4093 9.56855C12.4948 9.37063 12.5375 9.15952 12.5375 8.93521C12.5375 8.4866 12.3792 8.10396 12.0625 7.7873C11.7458 7.47063 11.3632 7.3123 10.9146 7.3123C10.6639 7.3123 10.4166 7.38487 10.1728 7.53C9.92844 7.67514 9.63473 7.91924 9.29168 8.2623C8.89584 7.89285 8.58577 7.64216 8.36147 7.51021C8.13716 7.37827 7.90626 7.3123 7.66876 7.3123C7.22015 7.3123 6.83751 7.47063 6.52084 7.7873C6.20418 8.10396 6.04584 8.4866 6.04584 8.93521C6.04584 9.15952 6.08859 9.37063 6.17409 9.56855C6.26012 9.76646 6.3757 9.93799 6.52084 10.0831L9.29168 12.854ZM10.2813 15.9415C9.97779 16.2449 9.60175 16.3967 9.15314 16.3967C8.70452 16.3967 8.32848 16.2449 8.02501 15.9415L1.05834 8.9748C0.913205 8.82966 0.797885 8.65813 0.712385 8.46021C0.626357 8.2623 0.583344 8.05119 0.583344 7.82688V2.16646C0.583344 1.73105 0.73851 1.35817 1.04884 1.04784C1.35865 0.738033 1.73126 0.58313 2.16668 0.58313H7.82709C8.0514 0.58313 8.26251 0.62588 8.46043 0.71138C8.65834 0.797408 8.82987 0.912991 8.97501 1.05813L15.9417 8.04459C16.2451 8.34806 16.3969 8.72067 16.3969 9.16242C16.3969 9.6047 16.2451 9.97757 15.9417 10.281L10.2813 15.9415ZM9.15314 14.8331L14.8136 9.17271L7.82709 2.16646H2.16668V7.82688L9.15314 14.8331ZM4.14584 5.33313C4.4757 5.33313 4.75595 5.21755 4.98659 4.98638C5.21776 4.75574 5.33334 4.47549 5.33334 4.14563C5.33334 3.81577 5.21776 3.53552 4.98659 3.30488C4.75595 3.07371 4.4757 2.95813 4.14584 2.95813C3.81598 2.95813 3.53573 3.07371 3.30509 3.30488C3.07393 3.53552 2.95834 3.81577 2.95834 4.14563C2.95834 4.47549 3.07393 4.75574 3.30509 4.98638C3.53573 5.21755 3.81598 5.33313 4.14584 5.33313Z"
|
|
5
|
-
fill="
|
|
5
|
+
fill="#6E7084"
|
|
6
6
|
/>
|
|
7
7
|
</svg>
|
|
8
8
|
</template>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<svg width="
|
|
2
|
+
<svg width="19" height="19" viewBox="0 0 19 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
3
|
<path
|
|
4
|
-
d="
|
|
4
|
+
d="M1.54165 10.7083C1.19217 10.7083 0.893098 10.584 0.644438 10.3353C0.395355 10.0863 0.270813 9.78698 0.270813 9.4375V1.8125C0.270813 1.46302 0.395355 1.16395 0.644438 0.915289C0.893098 0.666206 1.19217 0.541664 1.54165 0.541664H11.7083C12.0578 0.541664 12.3571 0.666206 12.6062 0.915289C12.8548 1.16395 12.9791 1.46302 12.9791 1.8125V9.4375C12.9791 9.78698 12.8548 10.0863 12.6062 10.3353C12.3571 10.584 12.0578 10.7083 11.7083 10.7083H1.54165ZM6.62498 6.26041L1.54165 3.08333V9.4375H11.7083V3.08333L6.62498 6.26041ZM6.62498 4.98958L11.7083 1.8125H1.54165L6.62498 4.98958ZM1.54165 3.08333V1.8125V9.4375V3.08333Z"
|
|
5
5
|
fill="white"
|
|
6
6
|
/>
|
|
7
7
|
</svg>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<svg width="
|
|
2
|
+
<svg width="9" height="12" viewBox="0 0 9 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
3
|
<path
|
|
4
|
-
d="
|
|
4
|
+
d="M0 11.2311V0.73114L8.25 5.98114L0 11.2311ZM1.5 8.49364L5.4375 5.98114L1.5 3.46864V8.49364Z"
|
|
5
5
|
fill="white"
|
|
6
6
|
/>
|
|
7
7
|
</svg>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
3
|
-
<path
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="16" height="15" fill="white">
|
|
3
|
+
<path
|
|
4
|
+
fill="white"
|
|
5
|
+
d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V448c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H176c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"
|
|
6
|
+
/>
|
|
6
7
|
</svg>
|
|
7
8
|
</template>
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
<g>
|
|
14
14
|
<g>
|
|
15
15
|
<path
|
|
16
|
-
|
|
16
|
+
style="fill: #6e7084"
|
|
17
17
|
d="M16.192,5.224V4.487h-8.77v0.737c0,0,1.334,3.713,3.838,5.428v1.785c0,0-2.761,2.686-3.838,5.775
|
|
18
18
|
v0.842h8.77v-0.842c-1.399-3.41-3.837-5.775-3.837-5.775v-1.785C15.759,7.726,16.192,5.224,16.192,5.224z"
|
|
19
19
|
/>
|
|
20
20
|
</g>
|
|
21
21
|
<g>
|
|
22
22
|
<path
|
|
23
|
-
|
|
23
|
+
style="fill: #6e7084"
|
|
24
24
|
d="M19.353,3.856V2.529h1.258V0H3.002v2.529h1.259v1.327c0,2.025,3.634,7.555,3.804,7.955
|
|
25
25
|
c-0.167,0.397-3.804,5.929-3.804,7.946v1.325H3.002v2.53h17.609v-2.53h-1.258v-1.325c0-2.025-3.635-7.521-3.829-7.951
|
|
26
26
|
C15.718,11.376,19.353,5.88,19.353,3.856z M18.096,19.757v1.325H5.519v-1.325c0-1.455,3.854-7.222,3.854-7.951
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<g mask="url(#mask0_16_241)">
|
|
7
7
|
<path
|
|
8
8
|
d="M2.37499 5.54165V2.37498L5.54166 3.95831L2.37499 5.54165ZM14.25 5.54165V2.37498L17.4167 3.95831L14.25 5.54165ZM8.70833 4.74998V1.58331L11.875 3.16665L8.70833 4.74998ZM8.70833 17.4166C7.70555 17.3903 6.77218 17.3079 5.9082 17.1696C5.0437 17.0308 4.29162 16.8559 3.65195 16.6448C3.01176 16.4337 2.50694 16.1896 2.13749 15.9125C1.76805 15.6354 1.58333 15.3451 1.58333 15.0416V7.91665C1.58333 7.58678 1.79127 7.27988 2.20716 6.99594C2.62252 6.71252 3.18645 6.46183 3.89895 6.24385C4.61145 6.02641 5.4493 5.85488 6.4125 5.72927C7.37569 5.60419 8.40486 5.54165 9.49999 5.54165C10.5951 5.54165 11.6243 5.60419 12.5875 5.72927C13.5507 5.85488 14.3885 6.02641 15.101 6.24385C15.8135 6.46183 16.3775 6.71252 16.7928 6.99594C17.2087 7.27988 17.4167 7.58678 17.4167 7.91665V15.0416C17.4167 15.3451 17.2319 15.6354 16.8625 15.9125C16.493 16.1896 15.9885 16.4337 15.3488 16.6448C14.7086 16.8559 13.9565 17.0308 13.0926 17.1696C12.2281 17.3079 11.2944 17.3903 10.2917 17.4166V14.25H8.70833V17.4166ZM9.49999 8.70831C10.7799 8.70831 11.885 8.63231 12.8155 8.48031C13.7454 8.32884 14.4875 8.15415 15.0417 7.95623C15.0417 7.89026 14.5403 7.73509 13.5375 7.49073C12.5347 7.2469 11.1889 7.12498 9.49999 7.12498C7.81111 7.12498 6.46527 7.2469 5.46249 7.49073C4.45972 7.73509 3.95833 7.89026 3.95833 7.95623C4.51249 8.15415 5.25481 8.32884 6.18529 8.48031C7.11523 8.63231 8.22013 8.70831 9.49999 8.70831ZM7.12499 15.7146V12.6666H11.875V15.7146C12.9305 15.609 13.7948 15.4538 14.4677 15.2491C15.1406 15.0448 15.5958 14.8635 15.8333 14.7052V9.34165C15.1076 9.63192 14.1972 9.86283 13.1021 10.0344C12.0069 10.2059 10.8062 10.2916 9.49999 10.2916C8.19374 10.2916 6.99305 10.2059 5.89791 10.0344C4.80277 9.86283 3.89236 9.63192 3.16666 9.34165V14.7052C3.40416 14.8635 3.85937 15.0448 4.53229 15.2491C5.2052 15.4538 6.06944 15.609 7.12499 15.7146Z"
|
|
9
|
-
fill="
|
|
9
|
+
fill="#6E7084"
|
|
10
10
|
/>
|
|
11
11
|
</g>
|
|
12
12
|
</svg>
|
|
@@ -43,18 +43,6 @@ import ReloadIcon from "./Reload.vue";
|
|
|
43
43
|
import FilterIcon from "./Filter.vue";
|
|
44
44
|
import SandclockIcon from "./Sandclock.vue";
|
|
45
45
|
import GearIcon from "./Gear.vue";
|
|
46
|
-
import CloseIcon from "./Close.vue";
|
|
47
|
-
import KeyIcon from "./Key.vue";
|
|
48
|
-
import PencilIcon from "./Pencil.vue";
|
|
49
|
-
import SellIcon from "./Sell.vue";
|
|
50
|
-
import SquareCheckIcon from "./SquareCheck.vue";
|
|
51
|
-
import SquareUncheckIcon from "./SquareUncheck.vue";
|
|
52
|
-
import WildcardIcon from "./Wildcard.vue";
|
|
53
|
-
import ProfileIcon from "./Profile.vue";
|
|
54
|
-
import CloseXIcon from "./CloseX.vue";
|
|
55
|
-
import CheckIcon from "./Check.vue";
|
|
56
|
-
import SpinnerIcon from "./Spinner.vue";
|
|
57
|
-
|
|
58
46
|
export {
|
|
59
47
|
EditIcon,
|
|
60
48
|
ConsoleIcon,
|
|
@@ -96,16 +84,5 @@ export {
|
|
|
96
84
|
ReloadIcon,
|
|
97
85
|
FilterIcon,
|
|
98
86
|
SandclockIcon,
|
|
99
|
-
GearIcon
|
|
100
|
-
CloseIcon,
|
|
101
|
-
KeyIcon,
|
|
102
|
-
PencilIcon,
|
|
103
|
-
SellIcon,
|
|
104
|
-
SquareCheckIcon,
|
|
105
|
-
SquareUncheckIcon,
|
|
106
|
-
WildcardIcon,
|
|
107
|
-
ProfileIcon,
|
|
108
|
-
CloseXIcon,
|
|
109
|
-
CheckIcon,
|
|
110
|
-
SpinnerIcon
|
|
87
|
+
GearIcon
|
|
111
88
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="modal-mask pt-14
|
|
3
|
-
<div class="component-modal" ref="target"
|
|
2
|
+
<div class="modal-mask pt-14 ipadlg:py-1 overflow-y-scroll scrollable">
|
|
3
|
+
<div class="component-modal" ref="target">
|
|
4
4
|
<div class="modal-header">
|
|
5
5
|
<slot name="header" />
|
|
6
|
-
<button @click="ui.toggleModal()"
|
|
7
|
-
<
|
|
6
|
+
<button @click="ui.toggleModal()">
|
|
7
|
+
<img src="@/assets/img/close.svg" />
|
|
8
8
|
</button>
|
|
9
9
|
</div>
|
|
10
10
|
<div class="modal-body">
|
|
@@ -16,132 +16,40 @@
|
|
|
16
16
|
<script setup>
|
|
17
17
|
import { useUIStore } from "@/stores/ui";
|
|
18
18
|
import { onClickOutside } from "@vueuse/core";
|
|
19
|
-
import { ref
|
|
20
|
-
import { CloseIcon } from "@/components/icons";
|
|
21
|
-
|
|
19
|
+
import { ref } from "vue";
|
|
22
20
|
const ui = useUIStore();
|
|
23
21
|
const target = ref(null);
|
|
24
22
|
|
|
25
|
-
// Store original body styles
|
|
26
|
-
let originalOverflow = "";
|
|
27
|
-
let originalPosition = "";
|
|
28
|
-
let originalTop = "";
|
|
29
|
-
let scrollY = 0;
|
|
30
|
-
|
|
31
|
-
onMounted(() => {
|
|
32
|
-
// Lock body scroll
|
|
33
|
-
scrollY = window.scrollY;
|
|
34
|
-
originalOverflow = document.body.style.overflow;
|
|
35
|
-
originalPosition = document.body.style.position;
|
|
36
|
-
originalTop = document.body.style.top;
|
|
37
|
-
|
|
38
|
-
document.body.style.overflow = "hidden";
|
|
39
|
-
document.body.style.position = "fixed";
|
|
40
|
-
document.body.style.top = `-${scrollY}px`;
|
|
41
|
-
document.body.style.width = "100%";
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
onUnmounted(() => {
|
|
45
|
-
// Restore body scroll
|
|
46
|
-
document.body.style.overflow = originalOverflow;
|
|
47
|
-
document.body.style.position = originalPosition;
|
|
48
|
-
document.body.style.top = originalTop;
|
|
49
|
-
document.body.style.width = "";
|
|
50
|
-
window.scrollTo(0, scrollY);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
23
|
onClickOutside(target, (event) => {
|
|
54
24
|
if (event.target.classList.contains("modal-mask")) ui.toggleModal();
|
|
55
25
|
});
|
|
56
26
|
</script>
|
|
57
27
|
<style lang="scss" scoped>
|
|
58
28
|
.modal-mask {
|
|
59
|
-
@apply fixed top-0 left-0 w-
|
|
60
|
-
z-index:
|
|
61
|
-
background-color:
|
|
62
|
-
backdrop-filter: blur(4px);
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
padding: 1rem;
|
|
29
|
+
@apply fixed top-0 left-0 w-full h-full flex duration-300 ease-in-out;
|
|
30
|
+
z-index: 9998;
|
|
31
|
+
background-color: #111111d6;
|
|
66
32
|
}
|
|
67
|
-
|
|
68
33
|
.component-modal {
|
|
34
|
+
margin: auto;
|
|
69
35
|
width: 640px;
|
|
70
|
-
|
|
71
|
-
margin-bottom: 3rem;
|
|
72
|
-
overflow-y: auto; // Make scrollable when content is too tall
|
|
73
|
-
@apply bg-dark-300 px-5 py-5 rounded-lg flex flex-col;
|
|
36
|
+
// background: url('@/assets/img/background.svg') center center no-repeat;
|
|
74
37
|
|
|
38
|
+
@apply bg-dark-300 px-5 py-5 rounded-lg m-auto flex flex-col;
|
|
75
39
|
.modal-header {
|
|
76
40
|
@apply flex text-white font-bold;
|
|
77
|
-
|
|
78
41
|
button {
|
|
79
42
|
@apply ml-auto;
|
|
80
43
|
}
|
|
81
44
|
}
|
|
82
|
-
|
|
83
45
|
.modal-body {
|
|
84
46
|
@apply flex flex-col;
|
|
85
|
-
flex: 1;
|
|
86
47
|
}
|
|
87
48
|
}
|
|
88
|
-
|
|
89
49
|
@media (max-width: 810px) {
|
|
90
|
-
.modal-mask {
|
|
91
|
-
align-items: flex-start; // Start from top on mobile
|
|
92
|
-
justify-content: center;
|
|
93
|
-
padding: 1rem;
|
|
94
|
-
padding-top: 3rem;
|
|
95
|
-
padding-bottom: 2rem; // Ensure bottom space
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.component-modal {
|
|
99
|
-
width: calc(100vw - 2rem);
|
|
100
|
-
margin-bottom: 6rem; // Increased bottom margin for better button access
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.modal-body {
|
|
104
|
-
padding-bottom: 4rem; // Increased padding for create button accessibility
|
|
105
|
-
overflow-y: auto; // Allow scrolling on mobile
|
|
106
|
-
flex: 1;
|
|
107
|
-
min-height: 0;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/* iPhone portrait mode - extra spacing for create button */
|
|
112
|
-
@media (max-width: 480px) and (orientation: portrait) {
|
|
113
|
-
.modal-mask {
|
|
114
|
-
padding-bottom: 3rem !important; // Extra bottom padding for iPhone
|
|
115
|
-
}
|
|
116
|
-
|
|
117
50
|
.component-modal {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.modal-body {
|
|
123
|
-
padding-bottom: 1rem !important; // Extra padding for create button on iPhone
|
|
51
|
+
width: 100vh !important;
|
|
52
|
+
height: 100% !important;
|
|
124
53
|
}
|
|
125
54
|
}
|
|
126
|
-
|
|
127
|
-
// iPhone landscape mode - proper modal centering with consistent spacing
|
|
128
|
-
// @media (max-height: 500px) and (orientation: landscape) {
|
|
129
|
-
// .modal-mask {
|
|
130
|
-
// padding: 1rem 1rem 4rem 1rem !important;
|
|
131
|
-
// align-items: center !important;
|
|
132
|
-
// justify-content: center !important;
|
|
133
|
-
// padding-bottom: 3rem !important; // Extra padding for create button on iPhone
|
|
134
|
-
// }
|
|
135
|
-
|
|
136
|
-
// .component-modal {
|
|
137
|
-
// max-height: calc(100vh - 10rem) !important;
|
|
138
|
-
// overflow-y: auto !important;
|
|
139
|
-
// margin: 0 !important;
|
|
140
|
-
// margin-bottom: 30px;
|
|
141
|
-
// }
|
|
142
|
-
|
|
143
|
-
// .modal-body {
|
|
144
|
-
// padding-bottom: 1rem !important;
|
|
145
|
-
// }
|
|
146
|
-
// }
|
|
147
55
|
</style>
|