@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.
Files changed (133) hide show
  1. package/.prettierrc +1 -27
  2. package/.vscode/extensions.json +1 -1
  3. package/README.md +79 -43
  4. package/backend/api.js +48 -40
  5. package/backend/auth.js +3 -3
  6. package/backend/batching.js +1 -1
  7. package/backend/endpoints.js +77 -13
  8. package/backend/index.js +2 -2
  9. package/backend/mock-data.js +38 -29
  10. package/backend/mock-src/classes/logger.js +8 -8
  11. package/backend/mock-src/classes/utils.js +3 -7
  12. package/backend/mock-src/database.js +0 -0
  13. package/backend/mock-src/ticketmaster.js +79 -79
  14. package/backend/validator.js +2 -2
  15. package/config/configs.json +3 -2
  16. package/config/filter.json +3 -2
  17. package/index.html +10 -81
  18. package/index.js +1 -1
  19. package/package.json +25 -40
  20. package/postcss.config.js +1 -1
  21. package/postinstall.js +17 -98
  22. package/public/android-chrome-192x192.png +0 -0
  23. package/public/android-chrome-512x512.png +0 -0
  24. package/public/apple-touch-icon.png +0 -0
  25. package/public/favicon-16x16.png +0 -0
  26. package/public/favicon-32x32.png +0 -0
  27. package/public/favicon.ico +0 -0
  28. package/public/manifest.json +7 -12
  29. package/public/sw.js +2 -0
  30. package/public/workbox-49fdaf31.js +2 -0
  31. package/public/workbox-49fdaf31.js.map +1 -0
  32. package/public/workbox-88575b92.js +2 -0
  33. package/public/workbox-88575b92.js.map +1 -0
  34. package/public/workbox-a67a7b11.js +2 -0
  35. package/public/workbox-a67a7b11.js.map +1 -0
  36. package/public/workbox-d4314735.js +2 -0
  37. package/public/workbox-d4314735.js.map +1 -0
  38. package/public/workbox-e0f89ef3.js +2 -0
  39. package/public/workbox-e0f89ef3.js.map +1 -0
  40. package/run +9 -176
  41. package/src/App.vue +85 -498
  42. package/src/assets/css/_input.scss +99 -144
  43. package/src/assets/css/main.scss +99 -450
  44. package/src/assets/img/background.svg +2 -2
  45. package/src/assets/img/logo_icon.png +0 -0
  46. package/src/components/Auth/LoginForm.vue +11 -62
  47. package/src/components/Editors/Account/Account.vue +40 -116
  48. package/src/components/Editors/Account/AccountCreator.vue +39 -88
  49. package/src/components/Editors/Account/AccountView.vue +34 -102
  50. package/src/components/Editors/Account/CreateAccount.vue +32 -80
  51. package/src/components/Editors/Profile/CreateProfile.vue +83 -269
  52. package/src/components/Editors/Profile/Profile.vue +47 -132
  53. package/src/components/Editors/Profile/ProfileCountryChooser.vue +20 -82
  54. package/src/components/Editors/Profile/ProfileView.vue +34 -91
  55. package/src/components/Editors/TagLabel.vue +6 -67
  56. package/src/components/Filter/Filter.vue +72 -289
  57. package/src/components/Filter/FilterPreview.vue +30 -171
  58. package/src/components/Filter/PriceSortToggle.vue +4 -74
  59. package/src/components/Table/Header.vue +1 -1
  60. package/src/components/Table/Row.vue +1 -1
  61. package/src/components/Table/Table.vue +2 -19
  62. package/src/components/Tasks/CheckStock.vue +13 -28
  63. package/src/components/Tasks/Controls/DesktopControls.vue +17 -17
  64. package/src/components/Tasks/Controls/MobileControls.vue +45 -8
  65. package/src/components/Tasks/CreateTaskAXS.vue +73 -79
  66. package/src/components/Tasks/CreateTaskTM.vue +142 -94
  67. package/src/components/Tasks/MassEdit.vue +7 -9
  68. package/src/components/Tasks/QuickSettings.vue +55 -169
  69. package/src/components/Tasks/ScrapeVenue.vue +4 -7
  70. package/src/components/Tasks/Stats.vue +23 -52
  71. package/src/components/Tasks/Task.vue +136 -378
  72. package/src/components/Tasks/TaskView.vue +47 -107
  73. package/src/components/Tasks/Utilities.vue +6 -5
  74. package/src/components/icons/Bag.vue +1 -1
  75. package/src/components/icons/Loyalty.vue +1 -1
  76. package/src/components/icons/Mail.vue +2 -2
  77. package/src/components/icons/Play.vue +2 -2
  78. package/src/components/icons/Reload.vue +5 -4
  79. package/src/components/icons/Sandclock.vue +2 -2
  80. package/src/components/icons/Stadium.vue +1 -1
  81. package/src/components/icons/index.js +1 -24
  82. package/src/components/ui/Modal.vue +13 -105
  83. package/src/components/ui/Navbar.vue +38 -171
  84. package/src/components/ui/ReconnectIndicator.vue +55 -351
  85. package/src/components/ui/Splash.vue +35 -5
  86. package/src/components/ui/controls/CountryChooser.vue +62 -200
  87. package/src/components/ui/controls/atomic/Checkbox.vue +10 -119
  88. package/src/components/ui/controls/atomic/Dropdown.vue +39 -208
  89. package/src/components/ui/controls/atomic/MultiDropdown.vue +37 -300
  90. package/src/libs/Filter.js +170 -200
  91. package/src/registerServiceWorker.js +1 -1
  92. package/src/stores/connection.js +53 -51
  93. package/src/stores/logger.js +3 -11
  94. package/src/stores/sampleData.js +235 -207
  95. package/src/stores/ui.js +44 -112
  96. package/src/stores/utils.js +6 -90
  97. package/src/views/Accounts.vue +35 -44
  98. package/src/views/Console.vue +90 -341
  99. package/src/views/Editor.vue +123 -1176
  100. package/src/views/FilterBuilder.vue +251 -607
  101. package/src/views/Login.vue +14 -76
  102. package/src/views/Profiles.vue +25 -44
  103. package/src/views/Tasks.vue +100 -187
  104. package/static/offline.html +50 -192
  105. package/tailwind.config.js +26 -104
  106. package/vite.config.js +16 -73
  107. package/vue.config.js +32 -0
  108. package/workbox-config.js +11 -0
  109. package/artwork/image.png +0 -0
  110. package/dev-server.js +0 -136
  111. package/exit +0 -209
  112. package/jsconfig.json +0 -16
  113. package/src/assets/css/_utilities.scss +0 -388
  114. package/src/assets/img/background.svg.backup +0 -11
  115. package/src/components/icons/Check.vue +0 -5
  116. package/src/components/icons/Close.vue +0 -21
  117. package/src/components/icons/CloseX.vue +0 -5
  118. package/src/components/icons/Key.vue +0 -21
  119. package/src/components/icons/Pencil.vue +0 -21
  120. package/src/components/icons/Profile.vue +0 -18
  121. package/src/components/icons/Sell.vue +0 -21
  122. package/src/components/icons/Spinner.vue +0 -42
  123. package/src/components/icons/SquareCheck.vue +0 -18
  124. package/src/components/icons/SquareUncheck.vue +0 -18
  125. package/src/components/icons/Wildcard.vue +0 -18
  126. package/src/components/ui/controls/atomic/LoadingButton.vue +0 -45
  127. package/src/composables/useClickOutside.js +0 -21
  128. package/src/composables/useDropdownPosition.js +0 -174
  129. package/src/types/index.js +0 -41
  130. package/src/utils/debug.js +0 -1
  131. package/switch-branch.sh +0 -41
  132. package/workbox-config.cjs +0 -63
  133. /package/src/assets/img/{logo_icon-old.png → logo_icon_2.png} +0 -0
@@ -1,64 +1,58 @@
1
1
  <template>
2
- <div class="table-component">
3
- <Header class="grid-cols-10 gap-2 text-center lg:grid-cols-12">
4
- <div class="col-span-1 flex items-center justify-start lg:col-span-2">
5
- <Checkbox
6
- class="ml-2 mr-4 flex-shrink-0"
7
- :toggled="ui.mainCheckbox.tasks"
8
- @valueUpdate="ui.toggleMainCheckbox('tasks')"
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="flex-center col-span-2" v-once>
18
- <TicketIcon class="mr-0 lg:mr-3" />
19
- <h4 class="hidden lg:flex">Tickets</h4>
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 class="flex-center col-span-5 md:col-span-4 lg:col-span-5" @click="ui.toggleSort('status')">
22
- <StatusIcon class="mr-0 lg:mr-3" />
23
- <h4 class="hidden lg:flex">Status</h4>
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="flex-center col-span-2 lg:col-span-3" v-once>
28
- <ClickIcon class="mr-0 lg:mr-3" />
29
- <h4 class="hidden lg:flex">Actions</h4>
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 top-3.5 hidden items-center lg:flex" @click="ui.toggleSort('taskId')">
32
- <h4 class="text-center text-xs">ID</h4>
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="hidden-scrollbars stop-pan flex flex-col divide-y divide-dark-650 overflow-y-auto overflow-x-hidden"
39
- :style="{ maxHeight: dynamicTableHeight }">
40
- <div v-for="(task, i) in getTasksInOrder()" :key="task.taskId" class="task-row-container">
41
- <Task :task="task" :class="i % 2 == 1 ? 'table-row-even' : 'table-row-odd'" />
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="empty-state flex flex-col items-center justify-center py-8 text-center">
46
- <div
47
- v-if="
48
- !ui.queueStats.queued && !ui.queueStats.sleeping && ui.queueStats.nextQueuePasses.length === 0
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
- </div>
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
- .task-row-container {
73
- min-height: 69px;
74
- flex-shrink: 0;
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
- @media (max-width: 480px) and (orientation: portrait) {
86
- min-height: 50px;
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
- .empty-state {
91
- @apply bg-dark-400;
92
- color: #969696;
93
- font-size: 14px;
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, TasksIcon } from "@/components/icons";
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-if="ui.currentModule == 'TM'">
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 justify-between lg:justify-start">
5
+ <div class="flex gap-3">
6
6
  <button class="button-default active:opacity-50 w-44" @click="ui.toggleModal('scrape-venue')">
7
- <ScrapeIcon />Scrape Venue
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="currentColor"
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="currentColor"
5
+ fill="#6E7084"
6
6
  />
7
7
  </svg>
8
8
  </template>
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
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="M3.54165 15.2083C3.19217 15.2083 2.893098 15.084 2.644438 14.8353C2.395355 14.5863 2.270813 14.287 2.270813 13.9375V6.3125C2.270813 5.96302 2.395355 5.66395 2.644438 5.41529C2.893098 5.16621 3.19217 5.04166 3.54165 5.04166H16.7083C17.0578 5.04166 17.3571 5.16621 17.6062 5.41529C17.8548 5.66395 17.9791 5.96302 17.9791 6.3125V13.9375C17.9791 14.287 17.8548 14.5863 17.6062 14.8353C17.3571 15.084 17.0578 15.2083 16.7083 15.2083H3.54165ZM10.125 10.7604L3.54165 7.58333V13.9375H16.7083V7.58333L10.125 10.7604ZM10.125 9.48958L16.7083 6.3125H3.54165L10.125 9.48958ZM3.54165 7.58333V6.3125V13.9375V7.58333Z"
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="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
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="M1.5 11.2311V0.73114L9.75 5.98114L1.5 11.2311ZM3 8.49364L6.9375 5.98114L3 3.46864V8.49364Z"
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 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
3
- <path d="M23 4v6h-6" />
4
- <path d="M1 20v-6h6" />
5
- <path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" />
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
- fill="white"
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
- fill="white"
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="white"
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 md:py-1 overflow-y-scroll scrollable" @touchmove.prevent>
3
- <div class="component-modal" ref="target" @touchmove.stop>
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()" class="btn-icon border-none hover:bg-dark-400">
7
- <CloseIcon />
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, onMounted, onUnmounted } from "vue";
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-screen h-screen flex duration-300 ease-in-out;
60
- z-index: 25000;
61
- background-color: rgba(17, 17, 17, 0.85);
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
- max-height: calc(100vh - 8rem); // Ensure bottom margin on desktop
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
- margin-bottom: 3rem !important; // Even more bottom margin for iPhone portrait
119
- max-height: calc(100vh - 12rem) !important; // Ensure modal doesn't get too tall
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>