@necrolab/dashboard 0.4.3
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 +45 -0
- package/.eslintrc.js +24 -0
- package/.prettierignore +1 -0
- package/.prettierrc +10 -0
- package/.vscode/extensions.json +3 -0
- package/ICONS.md +21 -0
- package/README.md +65 -0
- package/backend/api.js +430 -0
- package/backend/auth.js +62 -0
- package/backend/batching.js +43 -0
- package/backend/endpoints.js +343 -0
- package/backend/index.js +23 -0
- package/backend/mock-data.js +66 -0
- package/backend/mock-src/classes/logger.js +112 -0
- package/backend/mock-src/classes/utils.js +42 -0
- package/backend/mock-src/ticketmaster.js +92 -0
- package/backend/validator.js +62 -0
- package/config/configs.json +20 -0
- package/config/filter.json +3 -0
- package/config/presale.csv +3 -0
- package/config/proxies.txt +6 -0
- package/config/used-codes.json +4 -0
- package/index.html +114 -0
- package/index.js +2 -0
- package/jsconfig.json +16 -0
- package/package.json +48 -0
- package/postcss.config.js +6 -0
- package/postinstall.js +9 -0
- 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/flags/ae.svg +1 -0
- package/public/flags/at.svg +1 -0
- package/public/flags/au.svg +1 -0
- package/public/flags/be.svg +1 -0
- package/public/flags/ch.svg +1 -0
- package/public/flags/cz.svg +1 -0
- package/public/flags/de.svg +1 -0
- package/public/flags/dk.svg +1 -0
- package/public/flags/es.svg +1 -0
- package/public/flags/nl.svg +1 -0
- package/public/flags/no.svg +1 -0
- package/public/flags/nz.svg +1 -0
- package/public/flags/pl.svg +1 -0
- package/public/flags/se.svg +1 -0
- package/public/flags/uk.svg +1 -0
- package/public/flags/us.svg +1 -0
- package/public/img/award.svg +3 -0
- package/public/img/background.svg +14 -0
- package/public/img/bag_w.svg +12 -0
- package/public/img/banks/amex.svg +4 -0
- package/public/img/banks/mastercard.svg +4 -0
- package/public/img/banks/visa.svg +4 -0
- package/public/img/camera.svg +3 -0
- package/public/img/close.svg +3 -0
- package/public/img/controls/disable.svg +5 -0
- package/public/img/controls/enable.svg +5 -0
- package/public/img/groups.svg +3 -0
- package/public/img/hand.svg +3 -0
- package/public/img/key.svg +3 -0
- 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/public/img/logo_trans.png +0 -0
- package/public/img/loyalty.svg +3 -0
- package/public/img/mail.svg +3 -0
- package/public/img/pencil.svg +3 -0
- package/public/img/profile.svg +4 -0
- package/public/img/reload.svg +3 -0
- package/public/img/sandclock.svg +25 -0
- package/public/img/save.svg +5 -0
- package/public/img/savings.svg +3 -0
- package/public/img/scanner.svg +3 -0
- package/public/img/sell.svg +3 -0
- package/public/img/shield.svg +3 -0
- package/public/img/ski.svg +3 -0
- package/public/img/stadium.svg +8 -0
- package/public/img/stadium_w.svg +8 -0
- package/public/img/timer.svg +3 -0
- package/public/manifest.json +27 -0
- package/public/robots.txt +2 -0
- package/run +10 -0
- package/src/App.vue +307 -0
- package/src/assets/css/_input.scss +197 -0
- package/src/assets/css/main.scss +269 -0
- package/src/assets/css/tailwind.css +3 -0
- package/src/assets/img/award.svg +3 -0
- package/src/assets/img/background.svg +11 -0
- package/src/assets/img/camera.svg +3 -0
- package/src/assets/img/close.svg +3 -0
- package/src/assets/img/eyes/closed.svg +13 -0
- package/src/assets/img/eyes/open.svg +12 -0
- package/src/assets/img/groups.svg +3 -0
- package/src/assets/img/hand.svg +3 -0
- package/src/assets/img/key.svg +3 -0
- 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/src/assets/img/logo_trans.png +0 -0
- package/src/assets/img/loyalty.svg +3 -0
- package/src/assets/img/mail.svg +3 -0
- package/src/assets/img/pencil.svg +3 -0
- package/src/assets/img/reload.svg +3 -0
- package/src/assets/img/savings.svg +3 -0
- package/src/assets/img/scanner.svg +3 -0
- package/src/assets/img/sell.svg +3 -0
- package/src/assets/img/shield.svg +3 -0
- package/src/assets/img/ski.svg +3 -0
- package/src/assets/img/square_check.svg +5 -0
- package/src/assets/img/square_uncheck.svg +5 -0
- package/src/assets/img/stadium.svg +8 -0
- package/src/assets/img/timer.svg +3 -0
- package/src/assets/img/wildcard.svg +7 -0
- package/src/components/Auth/LoginForm.vue +48 -0
- package/src/components/Editors/Account/Account.vue +119 -0
- package/src/components/Editors/Account/AccountCreator.vue +147 -0
- package/src/components/Editors/Account/AccountView.vue +87 -0
- package/src/components/Editors/Account/CreateAccount.vue +106 -0
- package/src/components/Editors/Profile/CreateProfile.vue +321 -0
- package/src/components/Editors/Profile/Profile.vue +142 -0
- package/src/components/Editors/Profile/ProfileCountryChooser.vue +75 -0
- package/src/components/Editors/Profile/ProfileView.vue +96 -0
- package/src/components/Editors/TagLabel.vue +16 -0
- package/src/components/Editors/TagToggle.vue +41 -0
- package/src/components/Filter/Filter.vue +409 -0
- package/src/components/Filter/FilterPreview.vue +236 -0
- package/src/components/Filter/PriceSortToggle.vue +105 -0
- package/src/components/Table/Header.vue +5 -0
- package/src/components/Table/Row.vue +5 -0
- package/src/components/Table/Table.vue +14 -0
- package/src/components/Table/index.js +4 -0
- package/src/components/Tasks/CheckStock.vue +62 -0
- package/src/components/Tasks/Controls/DesktopControls.vue +73 -0
- package/src/components/Tasks/Controls/MobileControls.vue +32 -0
- package/src/components/Tasks/Controls/index.js +3 -0
- package/src/components/Tasks/CreateTaskAXS.vue +339 -0
- package/src/components/Tasks/CreateTaskTM.vue +459 -0
- package/src/components/Tasks/MassEdit.vue +50 -0
- package/src/components/Tasks/QuickSettings.vue +167 -0
- package/src/components/Tasks/ScrapeVenue.vue +42 -0
- package/src/components/Tasks/Stats.vue +66 -0
- package/src/components/Tasks/Task.vue +296 -0
- package/src/components/Tasks/TaskLabel.vue +20 -0
- package/src/components/Tasks/TaskView.vue +126 -0
- package/src/components/Tasks/Utilities.vue +33 -0
- package/src/components/icons/Award.vue +8 -0
- package/src/components/icons/Bag.vue +8 -0
- package/src/components/icons/BagWhite.vue +8 -0
- package/src/components/icons/Box.vue +8 -0
- package/src/components/icons/Camera.vue +8 -0
- package/src/components/icons/Cart.vue +8 -0
- package/src/components/icons/Check.vue +5 -0
- package/src/components/icons/Checkmark.vue +11 -0
- package/src/components/icons/Click.vue +8 -0
- package/src/components/icons/Close.vue +21 -0
- package/src/components/icons/CloseX.vue +5 -0
- package/src/components/icons/Console.vue +13 -0
- package/src/components/icons/Down.vue +8 -0
- package/src/components/icons/Edit.vue +13 -0
- package/src/components/icons/Event.vue +8 -0
- package/src/components/icons/Expand.vue +8 -0
- package/src/components/icons/Filter.vue +13 -0
- package/src/components/icons/Gear.vue +8 -0
- package/src/components/icons/Group.vue +8 -0
- package/src/components/icons/Hand.vue +8 -0
- package/src/components/icons/Key.vue +21 -0
- package/src/components/icons/Logout.vue +13 -0
- package/src/components/icons/Loyalty.vue +8 -0
- package/src/components/icons/Mail.vue +8 -0
- package/src/components/icons/Menu.vue +8 -0
- package/src/components/icons/Pause.vue +5 -0
- package/src/components/icons/Pencil.vue +21 -0
- package/src/components/icons/Play.vue +8 -0
- package/src/components/icons/Plus.vue +8 -0
- package/src/components/icons/Profile.vue +18 -0
- package/src/components/icons/Reload.vue +7 -0
- package/src/components/icons/Sandclock.vue +33 -0
- package/src/components/icons/Savings.vue +8 -0
- package/src/components/icons/Scanner.vue +8 -0
- package/src/components/icons/Scrape.vue +8 -0
- package/src/components/icons/Sell.vue +21 -0
- package/src/components/icons/Shield.vue +8 -0
- package/src/components/icons/Shrink.vue +8 -0
- package/src/components/icons/Ski.vue +8 -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 +13 -0
- package/src/components/icons/StadiumWhite.vue +13 -0
- package/src/components/icons/Status.vue +8 -0
- package/src/components/icons/Tag.vue +8 -0
- package/src/components/icons/Tasks.vue +13 -0
- package/src/components/icons/Ticket.vue +8 -0
- package/src/components/icons/Timer.vue +8 -0
- package/src/components/icons/Trash.vue +8 -0
- package/src/components/icons/Up.vue +10 -0
- package/src/components/icons/Wildcard.vue +18 -0
- package/src/components/icons/index.js +111 -0
- package/src/components/ui/Modal.vue +61 -0
- package/src/components/ui/Navbar.vue +207 -0
- package/src/components/ui/ReconnectIndicator.vue +90 -0
- package/src/components/ui/Splash.vue +24 -0
- package/src/components/ui/controls/CountryChooser.vue +87 -0
- package/src/components/ui/controls/EyeToggle.vue +11 -0
- package/src/components/ui/controls/atomic/Checkbox.vue +28 -0
- package/src/components/ui/controls/atomic/Dropdown.vue +138 -0
- package/src/components/ui/controls/atomic/LoadingButton.vue +45 -0
- package/src/components/ui/controls/atomic/MultiDropdown.vue +262 -0
- package/src/components/ui/controls/atomic/Switch.vue +84 -0
- package/src/libs/Filter.js +593 -0
- package/src/libs/ansii.js +565 -0
- package/src/libs/panzoom.js +1413 -0
- package/src/main.js +23 -0
- package/src/registerServiceWorker.js +32 -0
- package/src/router/index.js +65 -0
- package/src/stores/cities.json +1 -0
- package/src/stores/connection.js +399 -0
- package/src/stores/countries.js +88 -0
- package/src/stores/logger.js +103 -0
- package/src/stores/requests.js +88 -0
- package/src/stores/sampleData.js +1034 -0
- package/src/stores/ui.js +584 -0
- package/src/stores/utils.js +554 -0
- package/src/types/index.js +42 -0
- package/src/utils/debug.js +1 -0
- package/src/views/Accounts.vue +191 -0
- package/src/views/Console.vue +224 -0
- package/src/views/Editor.vue +785 -0
- package/src/views/FilterBuilder.vue +785 -0
- package/src/views/Login.vue +27 -0
- package/src/views/Profiles.vue +209 -0
- package/src/views/Tasks.vue +157 -0
- package/static/offline.html +184 -0
- package/tailwind.config.js +57 -0
- package/vite.config.js +63 -0
- package/vue.config.js +32 -0
- package/workbox-config.js +66 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg width="19" height="15" viewBox="0 0 19 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="M7.05 11L9.5 9.1625L11.9062 11L10.9875 8.025L13.4375 6.1H10.4625L9.5 3.125L8.5375 6.1H5.5625L7.96875 8.025L7.05 11ZM2.5 14.5C2.01875 14.5 1.60692 14.3288 1.2645 13.9864C0.9215 13.6434 0.75 13.2312 0.75 12.75V9.25C1.23125 9.25 1.64338 9.0785 1.98638 8.7355C2.32879 8.39308 2.5 7.98125 2.5 7.5C2.5 7.01875 2.32879 6.60663 1.98638 6.26363C1.64338 5.92121 1.23125 5.75 0.75 5.75V2.25C0.75 1.76875 0.9215 1.35692 1.2645 1.0145C1.60692 0.6715 2.01875 0.5 2.5 0.5H16.5C16.9813 0.5 17.3934 0.6715 17.7364 1.0145C18.0788 1.35692 18.25 1.76875 18.25 2.25V5.75C17.7687 5.75 17.3566 5.92121 17.0136 6.26363C16.6712 6.60663 16.5 7.01875 16.5 7.5C16.5 7.98125 16.6712 8.39308 17.0136 8.7355C17.3566 9.0785 17.7687 9.25 18.25 9.25V12.75C18.25 13.2312 18.0788 13.6434 17.7364 13.9864C17.3934 14.3288 16.9813 14.5 16.5 14.5H2.5ZM2.5 12.75H16.5V10.5188C15.9604 10.1979 15.534 9.7715 15.2207 9.2395C14.9069 8.70692 14.75 8.12708 14.75 7.5C14.75 6.87292 14.9069 6.29308 15.2207 5.7605C15.534 5.2285 15.9604 4.80208 16.5 4.48125V2.25H2.5V4.48125C3.03958 4.80208 3.46629 5.2285 3.78012 5.7605C4.09337 6.29308 4.25 6.87292 4.25 7.5C4.25 8.12708 4.09337 8.70692 3.78012 9.2395C3.46629 9.7715 3.03958 10.1979 2.5 10.5188V12.75Z"
|
|
5
|
+
fill="white"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg width="14" height="17" viewBox="0 0 14 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="M4.75 2.25V0.75H9.25V2.25H4.75ZM6.25 10.5H7.75V6H6.25V10.5ZM7 16.5C6.075 16.5 5.203 16.322 4.384 15.966C3.5655 15.6095 2.85 15.125 2.2375 14.5125C1.625 13.9 1.1405 13.1845 0.784 12.366C0.428 11.547 0.25 10.675 0.25 9.75C0.25 8.825 0.428 7.953 0.784 7.134C1.1405 6.3155 1.625 5.6 2.2375 4.9875C2.85 4.375 3.5655 3.89075 4.384 3.53475C5.203 3.17825 6.075 3 7 3C7.775 3 8.51875 3.125 9.23125 3.375C9.94375 3.625 10.6125 3.9875 11.2375 4.4625L12.2875 3.4125L13.3375 4.4625L12.2875 5.5125C12.7625 6.1375 13.125 6.80625 13.375 7.51875C13.625 8.23125 13.75 8.975 13.75 9.75C13.75 10.675 13.572 11.547 13.216 12.366C12.8595 13.1845 12.375 13.9 11.7625 14.5125C11.15 15.125 10.4345 15.6095 9.616 15.966C8.797 16.322 7.925 16.5 7 16.5ZM7 15C8.45 15 9.6875 14.4875 10.7125 13.4625C11.7375 12.4375 12.25 11.2 12.25 9.75C12.25 8.3 11.7375 7.0625 10.7125 6.0375C9.6875 5.0125 8.45 4.5 7 4.5C5.55 4.5 4.3125 5.0125 3.2875 6.0375C2.2625 7.0625 1.75 8.3 1.75 9.75C1.75 11.2 2.2625 12.4375 3.2875 13.4625C4.3125 14.4875 5.55 15 7 15Z"
|
|
5
|
+
fill="white"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="M2.95834 12.875C2.56876 12.875 2.23537 12.7364 1.95818 12.4592C1.68051 12.1815 1.54168 11.8479 1.54168 11.4583V2.25H0.833344V0.833333H4.37501V0.125H8.62501V0.833333H12.1667V2.25H11.4583V11.4583C11.4583 11.8479 11.3197 12.1815 11.0426 12.4592C10.7649 12.7364 10.4313 12.875 10.0417 12.875H2.95834ZM10.0417 2.25H2.95834V11.4583H10.0417V2.25ZM4.37501 10.0417H5.79168V3.66667H4.37501V10.0417ZM7.20834 10.0417H8.62501V3.66667H7.20834V10.0417Z"
|
|
5
|
+
fill="white"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="13" height="13" fill="#ffffff">
|
|
3
|
+
<path
|
|
4
|
+
d="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8
|
|
5
|
+
0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3
|
|
6
|
+
0s-12.5-32.8 0-45.3l192-192z"
|
|
7
|
+
fill="#ffffff"
|
|
8
|
+
/>
|
|
9
|
+
</svg>
|
|
10
|
+
</template>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg
|
|
3
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
viewBox="0 0 512 512"
|
|
5
|
+
class="wildcard-icon"
|
|
6
|
+
>
|
|
7
|
+
<path
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
d="M208 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V172.9l122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.5 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1V480c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V339.1L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4V32z"
|
|
10
|
+
/>
|
|
11
|
+
</svg>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<style scoped>
|
|
15
|
+
.wildcard-icon {
|
|
16
|
+
@apply w-4 h-4;
|
|
17
|
+
}
|
|
18
|
+
</style>
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import EditIcon from "./Edit.vue";
|
|
2
|
+
import ConsoleIcon from "./Console.vue";
|
|
3
|
+
/**
|
|
4
|
+
* Imported Icons here in case they need to be edited with
|
|
5
|
+
* CSS (i.e change fill color)
|
|
6
|
+
*/
|
|
7
|
+
import TasksIcon from "./Tasks.vue";
|
|
8
|
+
import LogoutIcon from "./Logout.vue";
|
|
9
|
+
import PlayIcon from "./Play.vue";
|
|
10
|
+
import PauseIcon from "./Pause.vue";
|
|
11
|
+
import TrashIcon from "./Trash.vue";
|
|
12
|
+
import ExpandIcon from "./Expand.vue";
|
|
13
|
+
import ShrinkIcon from "./Shrink.vue";
|
|
14
|
+
import EventIcon from "./Event.vue";
|
|
15
|
+
import StatusIcon from "./Status.vue";
|
|
16
|
+
import TicketIcon from "./Ticket.vue";
|
|
17
|
+
import CartIcon from "./Cart.vue";
|
|
18
|
+
import ClickIcon from "./Click.vue";
|
|
19
|
+
import MenuIcon from "./Menu.vue";
|
|
20
|
+
import CheckmarkIcon from "./Checkmark.vue";
|
|
21
|
+
import ScrapeIcon from "./Scrape.vue";
|
|
22
|
+
import BoxIcon from "./Box.vue";
|
|
23
|
+
import AwardIcon from "./Award.vue";
|
|
24
|
+
import MailIcon from "./Mail.vue";
|
|
25
|
+
import TagIcon from "./Tag.vue";
|
|
26
|
+
import ScannerIcon from "./Scanner.vue";
|
|
27
|
+
import StadiumIcon from "./Stadium.vue";
|
|
28
|
+
import CameraIcon from "./Camera.vue";
|
|
29
|
+
import BagIcon from "./Bag.vue";
|
|
30
|
+
import SkiIcon from "./Ski.vue";
|
|
31
|
+
import HandIcon from "./Hand.vue";
|
|
32
|
+
import GroupIcon from "./Group.vue";
|
|
33
|
+
import ShieldIcon from "./Shield.vue";
|
|
34
|
+
import TimerIcon from "./Timer.vue";
|
|
35
|
+
import LoyaltyIcon from "./Loyalty.vue";
|
|
36
|
+
import SavingsIcon from "./Savings.vue";
|
|
37
|
+
import StadiumWhiteIcon from "./StadiumWhite.vue";
|
|
38
|
+
import BagWhiteIcon from "./BagWhite.vue";
|
|
39
|
+
import UpIcon from "./Up.vue";
|
|
40
|
+
import DownIcon from "./Down.vue";
|
|
41
|
+
import PlusIcon from "./Plus.vue";
|
|
42
|
+
import ReloadIcon from "./Reload.vue";
|
|
43
|
+
import FilterIcon from "./Filter.vue";
|
|
44
|
+
import SandclockIcon from "./Sandclock.vue";
|
|
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
|
+
export {
|
|
59
|
+
EditIcon,
|
|
60
|
+
ConsoleIcon,
|
|
61
|
+
TasksIcon,
|
|
62
|
+
LogoutIcon,
|
|
63
|
+
PlayIcon,
|
|
64
|
+
PauseIcon,
|
|
65
|
+
TrashIcon,
|
|
66
|
+
ExpandIcon,
|
|
67
|
+
ShrinkIcon,
|
|
68
|
+
MenuIcon,
|
|
69
|
+
EventIcon,
|
|
70
|
+
StatusIcon,
|
|
71
|
+
TicketIcon,
|
|
72
|
+
CartIcon,
|
|
73
|
+
ClickIcon,
|
|
74
|
+
CheckmarkIcon,
|
|
75
|
+
ScrapeIcon,
|
|
76
|
+
BoxIcon,
|
|
77
|
+
AwardIcon,
|
|
78
|
+
MailIcon,
|
|
79
|
+
TagIcon,
|
|
80
|
+
ScannerIcon,
|
|
81
|
+
StadiumIcon,
|
|
82
|
+
CameraIcon,
|
|
83
|
+
BagIcon,
|
|
84
|
+
SkiIcon,
|
|
85
|
+
HandIcon,
|
|
86
|
+
GroupIcon,
|
|
87
|
+
ShieldIcon,
|
|
88
|
+
TimerIcon,
|
|
89
|
+
LoyaltyIcon,
|
|
90
|
+
SavingsIcon,
|
|
91
|
+
StadiumWhiteIcon,
|
|
92
|
+
BagWhiteIcon,
|
|
93
|
+
UpIcon,
|
|
94
|
+
DownIcon,
|
|
95
|
+
PlusIcon,
|
|
96
|
+
ReloadIcon,
|
|
97
|
+
FilterIcon,
|
|
98
|
+
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
|
|
111
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="modal-mask pt-14 ipadlg:py-1 overflow-y-scroll scrollable">
|
|
3
|
+
<div class="component-modal" ref="target">
|
|
4
|
+
<div class="modal-header">
|
|
5
|
+
<slot name="header" />
|
|
6
|
+
<button @click="ui.toggleModal()" class="btn-icon border-none hover:bg-dark-400">
|
|
7
|
+
<CloseIcon />
|
|
8
|
+
</button>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="modal-body">
|
|
11
|
+
<slot />
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
<script setup>
|
|
17
|
+
import { useUIStore } from "@/stores/ui";
|
|
18
|
+
import { onClickOutside } from "@vueuse/core";
|
|
19
|
+
import { ref } from "vue";
|
|
20
|
+
import { CloseIcon } from "@/components/icons";
|
|
21
|
+
|
|
22
|
+
const ui = useUIStore();
|
|
23
|
+
const target = ref(null);
|
|
24
|
+
|
|
25
|
+
onClickOutside(target, (event) => {
|
|
26
|
+
if (event.target.classList.contains("modal-mask")) ui.toggleModal();
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
<style lang="scss" scoped>
|
|
30
|
+
.modal-mask {
|
|
31
|
+
@apply fixed top-0 left-0 w-screen h-screen flex duration-300 ease-in-out;
|
|
32
|
+
z-index: 9998;
|
|
33
|
+
background-color: rgba(17, 17, 17, 0.85);
|
|
34
|
+
backdrop-filter: blur(4px);
|
|
35
|
+
}
|
|
36
|
+
.component-modal {
|
|
37
|
+
margin: auto;
|
|
38
|
+
width: 640px;
|
|
39
|
+
@apply bg-dark-300 px-5 py-5 rounded-lg m-auto flex flex-col;
|
|
40
|
+
|
|
41
|
+
.modal-header {
|
|
42
|
+
@apply flex text-white font-bold;
|
|
43
|
+
|
|
44
|
+
button {
|
|
45
|
+
@apply ml-auto;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.modal-body {
|
|
50
|
+
@apply flex flex-col;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
@media (max-width: 810px) {
|
|
54
|
+
.component-modal {
|
|
55
|
+
width: calc(100vw - 2rem);
|
|
56
|
+
max-height: calc(100vh - 2rem);
|
|
57
|
+
overflow-y: auto;
|
|
58
|
+
margin: 1rem;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="navbar" :class="{ 'force-z': menuOpen }">
|
|
3
|
+
<div :class="[
|
|
4
|
+
'component-container ios-wrapper flex items-center relative',
|
|
5
|
+
{ 'ios-wrapper': landscapeIos }
|
|
6
|
+
]">
|
|
7
|
+
<!-- Brand -->
|
|
8
|
+
<img src="@/assets/img/logo_trans.png" class="h-6 lg:h-8 mr-4 z-30 object-cover" alt="Logo: Necro" />
|
|
9
|
+
<!-- Navlinks -->
|
|
10
|
+
<ul class="hidden lg:flex">
|
|
11
|
+
<li>
|
|
12
|
+
<router-link to="/"><TasksIcon /><span class="hidden xl:block">Tasks</span></router-link>
|
|
13
|
+
</li>
|
|
14
|
+
<li>
|
|
15
|
+
<router-link to="/editor"><EditIcon /><span class="hidden xl:block">Editor</span></router-link>
|
|
16
|
+
</li>
|
|
17
|
+
<li v-if="ui.profile?.admin">
|
|
18
|
+
<router-link to="/console"><ConsoleIcon /><span class="hidden xl:block">Console</span></router-link>
|
|
19
|
+
</li>
|
|
20
|
+
<li>
|
|
21
|
+
<router-link to="/profiles">
|
|
22
|
+
<GroupIcon class="xl:mr-2" />
|
|
23
|
+
<span class="hidden xl:block">Profiles</span>
|
|
24
|
+
</router-link>
|
|
25
|
+
</li>
|
|
26
|
+
<li>
|
|
27
|
+
<router-link to="/accounts">
|
|
28
|
+
<MailIcon class="xl:mr-2" />
|
|
29
|
+
<span class="hidden xl:block">Accounts</span>
|
|
30
|
+
</router-link>
|
|
31
|
+
</li>
|
|
32
|
+
<li>
|
|
33
|
+
<router-link to="/filter"><FilterIcon /><span class="hidden xl:block">Filter</span></router-link>
|
|
34
|
+
</li>
|
|
35
|
+
</ul>
|
|
36
|
+
|
|
37
|
+
<!-- User Actions -->
|
|
38
|
+
<button class="hidden lg:block ml-auto mr-4 smooth-hover" @click="logout()">
|
|
39
|
+
<LogoutIcon />
|
|
40
|
+
</button>
|
|
41
|
+
<h4 v-if="ui.profile?.name" class="hidden lg:block text-white text-sm font-medium">
|
|
42
|
+
<span class="text-lightgray">Logged in as </span>
|
|
43
|
+
<span class="font-black"> {{ ui.profile?.name }}</span>
|
|
44
|
+
</h4>
|
|
45
|
+
<h4 v-else class="hidden lg:block text-white text-sm font-medium">
|
|
46
|
+
<span class="text-lightgray">Loading </span>
|
|
47
|
+
</h4>
|
|
48
|
+
<img
|
|
49
|
+
v-if="ui.profile?.profilePicture"
|
|
50
|
+
:src="ui.profile?.profilePicture"
|
|
51
|
+
alt="Profile Picture"
|
|
52
|
+
class="h-10 w-10 rounded-full hidden lg:block mx-4"
|
|
53
|
+
/>
|
|
54
|
+
<div v-else class="h-10 w-10 rounded-full hidden lg:block mx-4 bg-dark-400" />
|
|
55
|
+
<CountryChooser class="hidden lg:block" />
|
|
56
|
+
|
|
57
|
+
<!-- Mobile Toggle -->
|
|
58
|
+
<button class="flex lg:hidden ml-auto z-30" @click="toggleMenu">
|
|
59
|
+
<MenuIcon />
|
|
60
|
+
</button>
|
|
61
|
+
</div>
|
|
62
|
+
<!-- Mobile Menu -->
|
|
63
|
+
<transition name="fade">
|
|
64
|
+
<div class="mobile-menu flex lg:hidden flex-col z-30" v-if="menuOpen">
|
|
65
|
+
<CountryChooser class="mx-auto landscape:block hidden mt-4" />
|
|
66
|
+
<ul class="flex landscape:grid grid-cols-3 mx-auto mt-12 flex-col">
|
|
67
|
+
<!-- Close Menu on Nav Link Click -->
|
|
68
|
+
<li @click="toggleMenu">
|
|
69
|
+
<router-link to="/"><TasksIcon />Tasks</router-link>
|
|
70
|
+
</li>
|
|
71
|
+
<li @click="toggleMenu">
|
|
72
|
+
<router-link to="/editor"><EditIcon />Editor</router-link>
|
|
73
|
+
</li>
|
|
74
|
+
<li v-if="ui.profile?.admin" @click="toggleMenu">
|
|
75
|
+
<router-link to="/console"><ConsoleIcon />Console</router-link>
|
|
76
|
+
</li>
|
|
77
|
+
<li @click="toggleMenu">
|
|
78
|
+
<router-link to="/profiles">
|
|
79
|
+
<GroupIcon class="mr-2" />
|
|
80
|
+
Profiles
|
|
81
|
+
</router-link>
|
|
82
|
+
</li>
|
|
83
|
+
<li @click="toggleMenu">
|
|
84
|
+
<router-link to="/accounts">
|
|
85
|
+
<MailIcon class="mr-2" />
|
|
86
|
+
Accounts
|
|
87
|
+
</router-link>
|
|
88
|
+
</li>
|
|
89
|
+
<li @click="toggleMenu">
|
|
90
|
+
<router-link to="/filter"><FilterIcon />Filter</router-link>
|
|
91
|
+
</li>
|
|
92
|
+
</ul>
|
|
93
|
+
<!-- User Actions -->
|
|
94
|
+
<CountryChooser class="mx-auto block landscape:hidden mb-auto" />
|
|
95
|
+
<div class="flex mx-auto items-center landscape:mb-0">
|
|
96
|
+
<button class="mr-4" @click="logout()">
|
|
97
|
+
<LogoutIcon />
|
|
98
|
+
</button>
|
|
99
|
+
<h4 class="text-white text-sm font-medium mr-4">
|
|
100
|
+
<span class="text-lightgray">Logged in as </span>
|
|
101
|
+
<span class="font-black"> {{ ui.profile?.name }}</span>
|
|
102
|
+
</h4>
|
|
103
|
+
<img :src="ui.profile?.profilePicture" alt="" class="h-10 w-10 rounded-full" />
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<div class="mx-auto mt-6 mb-14 flex gap-3 items-center">
|
|
107
|
+
<div class="bg-gradient-to-r from-dark-400 to-dark-500 rounded-full text-sm shadow-lg p-2 px-4 text-white font-medium border border-light-300">
|
|
108
|
+
Dashboard v{{ dashVersion }}
|
|
109
|
+
</div>
|
|
110
|
+
<div class="bg-gradient-to-r from-dark-400 to-dark-500 rounded-full text-sm shadow-lg p-2 px-4 text-white font-medium border border-light-300">
|
|
111
|
+
Bot v{{ ui.botVersion }}
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</transition>
|
|
116
|
+
</div>
|
|
117
|
+
</template>
|
|
118
|
+
<style lang="scss" scoped>
|
|
119
|
+
.navbar {
|
|
120
|
+
@apply border-b py-5 fixed w-full;
|
|
121
|
+
top: 0;
|
|
122
|
+
z-index: 1;
|
|
123
|
+
backdrop-filter: blur(23px);
|
|
124
|
+
border-color: #323340;
|
|
125
|
+
|
|
126
|
+
ul {
|
|
127
|
+
@apply gap-x-4;
|
|
128
|
+
|
|
129
|
+
li a {
|
|
130
|
+
@apply flex text-white text-sm border-none h-10 items-center px-4 rounded-lg;
|
|
131
|
+
|
|
132
|
+
svg {
|
|
133
|
+
@apply mr-2;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&.router-link-exact-active {
|
|
137
|
+
@apply border-solid border border-light-300;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.force-z {
|
|
144
|
+
z-index: 20000;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.mobile-menu {
|
|
148
|
+
margin-top: -81px;
|
|
149
|
+
height: calc(100vh + 40px);
|
|
150
|
+
will-change: transform, opacity, filter;
|
|
151
|
+
@apply bg-dark-400 absolute pt-16 pb-8 w-full z-10;
|
|
152
|
+
|
|
153
|
+
ul li {
|
|
154
|
+
@apply mb-4 mx-auto;
|
|
155
|
+
|
|
156
|
+
a {
|
|
157
|
+
font-size: 20px !important;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
</style>
|
|
162
|
+
|
|
163
|
+
<script setup>
|
|
164
|
+
import { storeToRefs } from "pinia";
|
|
165
|
+
import { ref } from "vue";
|
|
166
|
+
import { EditIcon, ConsoleIcon, TasksIcon, LogoutIcon, MenuIcon, FilterIcon, GroupIcon, MailIcon } from "@/components/icons";
|
|
167
|
+
import { useUIStore } from "@/stores/ui";
|
|
168
|
+
import router from "@/router/index";
|
|
169
|
+
import CountryChooser from "@/components/ui/controls/CountryChooser.vue";
|
|
170
|
+
import { sendLogout } from "@/stores/requests";
|
|
171
|
+
|
|
172
|
+
const landscapeIos = ref(false);
|
|
173
|
+
|
|
174
|
+
function isIOS() {
|
|
175
|
+
if (/iPad|iPhone|iPod/.test(navigator.platform)) {
|
|
176
|
+
return true;
|
|
177
|
+
} else {
|
|
178
|
+
return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function isIpadOS() {
|
|
183
|
+
return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
window.matchMedia("(orientation: portrait)").addEventListener("change", (e) => {
|
|
187
|
+
if (!e.matches && isIOS() && !isIpadOS()) landscapeIos.value = true;
|
|
188
|
+
else landscapeIos.value = false;
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
const dashVersion = __APP_VERSION__;
|
|
192
|
+
const ui = useUIStore();
|
|
193
|
+
const menuOpen = storeToRefs(ui).menuOpen;
|
|
194
|
+
const toggleMenu = () => {
|
|
195
|
+
menuOpen.value = !menuOpen.value;
|
|
196
|
+
document.body.style.overflow = menuOpen.value ? "hidden" : "auto";
|
|
197
|
+
};
|
|
198
|
+
const logout = async () => {
|
|
199
|
+
ui.logger.Info("Logging out of session");
|
|
200
|
+
const json = await sendLogout();
|
|
201
|
+
if (json.error) return ui.showError(json.error);
|
|
202
|
+
else {
|
|
203
|
+
ui.setProfile({});
|
|
204
|
+
router.push("/login");
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
</script>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="my-auto relative flex justify-center flex-col items-center" style="height: 80vh">
|
|
3
|
+
<div class="spinner-container">
|
|
4
|
+
<div class="spinner"></div>
|
|
5
|
+
<img :src="logoIcon" alt="Beaker Logo" class="logo" />
|
|
6
|
+
</div>
|
|
7
|
+
<span class="text-white text-3xl font-light mt-3">{{ props.message }}{{ dots }}</span>
|
|
8
|
+
</div>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script setup>
|
|
12
|
+
import { ref } from "vue";
|
|
13
|
+
import logoIcon from "@/assets/img/logo_icon_2.png";
|
|
14
|
+
|
|
15
|
+
const dots = ref(".");
|
|
16
|
+
|
|
17
|
+
setInterval(() => {
|
|
18
|
+
dots.value += ".";
|
|
19
|
+
if (dots.value.length > 3) dots.value = ".";
|
|
20
|
+
}, 1000);
|
|
21
|
+
|
|
22
|
+
const props = defineProps({
|
|
23
|
+
message: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: "Reconnecting"
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<style scoped>
|
|
31
|
+
.spinner-container {
|
|
32
|
+
position: relative;
|
|
33
|
+
width: 200px;
|
|
34
|
+
height: 200px;
|
|
35
|
+
}
|
|
36
|
+
.logo {
|
|
37
|
+
position: absolute;
|
|
38
|
+
width: 180px;
|
|
39
|
+
height: 180px;
|
|
40
|
+
top: 50%;
|
|
41
|
+
left: 50%;
|
|
42
|
+
transform: translate(-50%, -50%);
|
|
43
|
+
border-radius: 50%;
|
|
44
|
+
object-fit: cover;
|
|
45
|
+
object-position: center;
|
|
46
|
+
z-index: 2;
|
|
47
|
+
}
|
|
48
|
+
.spinner {
|
|
49
|
+
position: absolute;
|
|
50
|
+
width: 185px;
|
|
51
|
+
height: 185px;
|
|
52
|
+
top: 50%;
|
|
53
|
+
left: 50%;
|
|
54
|
+
transform: translate(-50%, -50%);
|
|
55
|
+
border-radius: 50%;
|
|
56
|
+
border: 2px solid rgba(255, 255, 255, 0.1);
|
|
57
|
+
border-top: 2px solid #ffffff;
|
|
58
|
+
animation: spin 1s linear infinite;
|
|
59
|
+
}
|
|
60
|
+
.glow {
|
|
61
|
+
position: absolute;
|
|
62
|
+
width: 220px;
|
|
63
|
+
height: 220px;
|
|
64
|
+
top: 50%;
|
|
65
|
+
left: 50%;
|
|
66
|
+
transform: translate(-50%, -50%);
|
|
67
|
+
border-radius: 50%;
|
|
68
|
+
background: radial-gradient(circle, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
|
|
69
|
+
animation: pulse 2s ease-in-out infinite;
|
|
70
|
+
}
|
|
71
|
+
@keyframes spin {
|
|
72
|
+
0% {
|
|
73
|
+
transform: translate(-50%, -50%) rotate(0deg);
|
|
74
|
+
}
|
|
75
|
+
100% {
|
|
76
|
+
transform: translate(-50%, -50%) rotate(360deg);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
@keyframes pulse {
|
|
80
|
+
0%,
|
|
81
|
+
100% {
|
|
82
|
+
transform: translate(-50%, -50%) scale(1);
|
|
83
|
+
opacity: 0.5;
|
|
84
|
+
}
|
|
85
|
+
50% {
|
|
86
|
+
transform: translate(-50%, -50%) scale(1.05);
|
|
87
|
+
opacity: 0.7;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="darkBG h-screen w-screen z-[1000] fixed flex items-center flex-col justify-center gap-y-3">
|
|
3
|
+
<img src="@/assets/img/logo_trans.png" class="w-[300px] mx-auto" />
|
|
4
|
+
<SpinnerIcon />
|
|
5
|
+
</div>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
import { SpinnerIcon } from "@/components/icons";
|
|
10
|
+
</script>
|
|
11
|
+
<style lang="scss" scoped>
|
|
12
|
+
.darkBG {
|
|
13
|
+
background-color: rgba(28, 28, 49, 100%);
|
|
14
|
+
}
|
|
15
|
+
</style>
|
|
16
|
+
|
|
17
|
+
<style>
|
|
18
|
+
img {
|
|
19
|
+
transition: 0.3s;
|
|
20
|
+
}
|
|
21
|
+
img:hover {
|
|
22
|
+
transform: scale(1.1);
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div @click="open = !open">
|
|
3
|
+
<div class="dropdown input-default p-4 w-16 bg-dark-550 small-dropdown">
|
|
4
|
+
<span class="flex justify-between items-center z-inf text-white">
|
|
5
|
+
<div class="flex gap-3 justify-center">
|
|
6
|
+
<img class="w-5" :src="`/flags/${ui.currentCountry.siteId.split('_')[1].toLowerCase()}.svg`" />
|
|
7
|
+
</div>
|
|
8
|
+
</span>
|
|
9
|
+
<transition name="fade">
|
|
10
|
+
<div
|
|
11
|
+
v-if="open"
|
|
12
|
+
class="dropdown-content special-dropdown mt-2 snap-mandatory snap-y z-inf overflow-scroll hidden-scrollbars"
|
|
13
|
+
>
|
|
14
|
+
<div class="snap-start pt-2 text-sm font-bold text-center">TM</div>
|
|
15
|
+
<div
|
|
16
|
+
v-bind:key="country.id"
|
|
17
|
+
v-for="(country, i) in countries.TM"
|
|
18
|
+
:class="`cursor-pointer snap-start w-12 ${i === 0 ? 'pt-2' : 'my-2'}`"
|
|
19
|
+
@click="ui.setCurrentCountry(country, true, 'TM')"
|
|
20
|
+
>
|
|
21
|
+
<div class="flex justify-between smooth-hover">
|
|
22
|
+
<span class="text-sm">{{ country.siteId.split("_")[1] }} </span>
|
|
23
|
+
<img class="w-5" :src="`/flags/${country.siteId.split('_')[1].toLowerCase()}.svg`" />
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="snap-start pt-2 text-sm font-bold text-center">AXS</div>
|
|
27
|
+
<div
|
|
28
|
+
v-bind:key="country.id"
|
|
29
|
+
v-for="(country, i) in countries.AXS"
|
|
30
|
+
:class="`cursor-pointer snap-start w-12 ${i === 0 ? 'pt-2' : 'my-2'}`"
|
|
31
|
+
@click="ui.setCurrentCountry(country, true, 'AXS')"
|
|
32
|
+
>
|
|
33
|
+
<div class="flex gap-3 justify-between smooth-hover">
|
|
34
|
+
<span class="text-sm">{{ country.siteId.split("_")[1] }} </span>
|
|
35
|
+
<img class="w-5" :src="`/flags/${country.siteId.split('_')[1].toLowerCase()}.svg`" />
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</transition>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<script setup>
|
|
45
|
+
import { ref } from "vue";
|
|
46
|
+
import { useUIStore } from "@/stores/ui";
|
|
47
|
+
import { countries } from "@/stores/countries";
|
|
48
|
+
const ui = useUIStore();
|
|
49
|
+
const open = ref(false);
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<style scoped>
|
|
53
|
+
.special-dropdown {
|
|
54
|
+
@apply min-w-20;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.small-dropdown {
|
|
58
|
+
background-clip: border-box !important;
|
|
59
|
+
border-radius: 100% !important;
|
|
60
|
+
padding: 0;
|
|
61
|
+
width: 3em !important;
|
|
62
|
+
height: 3em !important;
|
|
63
|
+
display: flex;
|
|
64
|
+
justify-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.dropdown-content {
|
|
69
|
+
left: -1.25rem;
|
|
70
|
+
background-clip: border-box !important;
|
|
71
|
+
@apply border border-light-300;
|
|
72
|
+
border-width: 2px;
|
|
73
|
+
--tw-border-opacity: 1;
|
|
74
|
+
border-color: rgb(41 42 67 / var(--tw-border-opacity));
|
|
75
|
+
max-height: 13rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@media (max-width: 1024px) {
|
|
79
|
+
.small-dropdown {
|
|
80
|
+
@apply bg-dark-550 !important;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.dropdown-content {
|
|
84
|
+
@apply bg-dark-550 !important;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<button @click="toggle" class="w-22 cursor-pointer">
|
|
3
|
+
<img v-if="value" class="w-5 h-5" src="@/assets/img/eyes/open.svg" alt="Open Eye" />
|
|
4
|
+
<img v-else class="w-5 h-5" src="@/assets/img/eyes/closed.svg" alt="Closed Eye" />
|
|
5
|
+
</button>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup>
|
|
9
|
+
const value = defineModel();
|
|
10
|
+
const toggle = () => (value.value = !value.value);
|
|
11
|
+
</script>
|