@necrolab/dashboard 0.5.15 → 0.5.17

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 (137) hide show
  1. package/backend/api.js +2 -3
  2. package/eslint.config.js +46 -0
  3. package/index.html +2 -1
  4. package/package.json +5 -2
  5. package/src/App.vue +70 -566
  6. package/src/assets/css/base/mixins.scss +72 -0
  7. package/src/assets/css/base/reset.scss +0 -2
  8. package/src/assets/css/base/scroll.scss +43 -36
  9. package/src/assets/css/base/typography.scss +9 -10
  10. package/src/assets/css/base/variables.scss +43 -0
  11. package/src/assets/css/components/accessibility.scss +37 -0
  12. package/src/assets/css/components/buttons.scss +61 -74
  13. package/src/assets/css/components/forms.scss +31 -32
  14. package/src/assets/css/components/headers.scss +13 -21
  15. package/src/assets/css/components/modals.scss +2 -2
  16. package/src/assets/css/components/search-groups.scss +28 -22
  17. package/src/assets/css/components/tables.scss +5 -7
  18. package/src/assets/css/components/toasts.scss +7 -7
  19. package/src/assets/css/components/utilities.scss +295 -0
  20. package/src/assets/css/main.scss +55 -139
  21. package/src/components/Auth/LoginForm.vue +7 -86
  22. package/src/components/Console/ConsoleToolbar.vue +123 -0
  23. package/src/components/Editors/Account/Account.vue +12 -12
  24. package/src/components/Editors/Account/AccountView.vue +38 -111
  25. package/src/components/Editors/Account/CreateAccount.vue +11 -61
  26. package/src/components/Editors/Account/{AccountCreator.vue → CreateAccountBatch.vue} +28 -59
  27. package/src/components/Editors/AdminFileEditor.vue +179 -0
  28. package/src/components/Editors/Profile/CreateProfile.vue +77 -150
  29. package/src/components/Editors/Profile/Profile.vue +20 -21
  30. package/src/components/Editors/Profile/ProfileCountryChooser.vue +16 -60
  31. package/src/components/Editors/Profile/ProfileView.vue +41 -116
  32. package/src/components/Editors/ProxyFileEditor.vue +86 -0
  33. package/src/components/Editors/TagLabel.vue +16 -55
  34. package/src/components/Editors/TagToggle.vue +20 -8
  35. package/src/components/Filter/Filter.vue +66 -79
  36. package/src/components/Filter/FilterPreview.vue +153 -135
  37. package/src/components/Filter/PriceSortToggle.vue +36 -43
  38. package/src/components/Table/Header.vue +1 -1
  39. package/src/components/Table/Table.vue +45 -51
  40. package/src/components/Tasks/CheckStock.vue +7 -16
  41. package/src/components/Tasks/Controls/DesktopControls.vue +15 -60
  42. package/src/components/Tasks/Controls/MobileControls.vue +5 -20
  43. package/src/components/Tasks/CreateTaskAXS.vue +20 -118
  44. package/src/components/Tasks/CreateTaskTM.vue +33 -189
  45. package/src/components/Tasks/EventDetailRow.vue +21 -0
  46. package/src/components/Tasks/MassEdit.vue +6 -16
  47. package/src/components/Tasks/QuickSettings.vue +140 -216
  48. package/src/components/Tasks/ScrapeVenue.vue +4 -13
  49. package/src/components/Tasks/Stats.vue +20 -39
  50. package/src/components/Tasks/Task.vue +64 -270
  51. package/src/components/Tasks/TaskLabel.vue +9 -3
  52. package/src/components/Tasks/TaskView.vue +45 -64
  53. package/src/components/Tasks/Utilities.vue +10 -44
  54. package/src/components/Tasks/ViewTask.vue +23 -107
  55. package/src/components/icons/Close.vue +2 -8
  56. package/src/components/icons/Gear.vue +8 -8
  57. package/src/components/icons/Hash.vue +5 -0
  58. package/src/components/icons/Key.vue +2 -8
  59. package/src/components/icons/Pencil.vue +2 -8
  60. package/src/components/icons/Profile.vue +2 -8
  61. package/src/components/icons/Sell.vue +2 -8
  62. package/src/components/icons/Spinner.vue +4 -7
  63. package/src/components/icons/Wildcard.vue +2 -8
  64. package/src/components/icons/index.js +3 -5
  65. package/src/components/ui/ActionButtonGroup.vue +113 -52
  66. package/src/components/ui/BalanceIndicator.vue +60 -0
  67. package/src/components/ui/EmptyState.vue +24 -0
  68. package/src/components/ui/EnableDisableToggle.vue +23 -0
  69. package/src/components/ui/FormField.vue +49 -49
  70. package/src/components/ui/IconLabel.vue +23 -0
  71. package/src/components/ui/InfoRow.vue +21 -54
  72. package/src/components/ui/Modal.vue +161 -54
  73. package/src/components/ui/Navbar.vue +63 -44
  74. package/src/components/ui/ReadonlyFieldsSection.vue +31 -0
  75. package/src/components/ui/ReconnectIndicator.vue +111 -124
  76. package/src/components/ui/SectionCard.vue +6 -14
  77. package/src/components/ui/Splash.vue +2 -10
  78. package/src/components/ui/StatusBadge.vue +26 -28
  79. package/src/components/ui/TaskToggle.vue +54 -0
  80. package/src/components/ui/controls/CountryChooser.vue +29 -66
  81. package/src/components/ui/controls/EyeToggle.vue +1 -1
  82. package/src/components/ui/controls/atomic/Checkbox.vue +40 -121
  83. package/src/components/ui/controls/atomic/Dropdown.vue +103 -139
  84. package/src/components/ui/controls/atomic/MultiDropdown.vue +72 -120
  85. package/src/components/ui/controls/atomic/Switch.vue +21 -84
  86. package/src/composables/useCodeEditor.js +117 -0
  87. package/src/composables/useColorMapping.js +15 -0
  88. package/src/composables/useCopyToClipboard.js +1 -1
  89. package/src/composables/useDateFormatting.js +21 -0
  90. package/src/composables/useDeviceDetection.js +14 -0
  91. package/src/composables/useDropdownPosition.js +1 -4
  92. package/src/composables/useDynamicTableHeight.js +31 -0
  93. package/src/composables/useEnableDisable.js +6 -0
  94. package/src/composables/useFilterCSS.js +71 -0
  95. package/src/composables/useFormValidation.js +92 -0
  96. package/src/composables/useGetAllTags.js +9 -0
  97. package/src/composables/useIOSViewportHandling.js +76 -0
  98. package/src/composables/useNotchHandling.js +306 -0
  99. package/src/composables/useRowSelection.js +0 -3
  100. package/src/composables/useTableRender.js +23 -0
  101. package/src/composables/useTicketPricing.js +16 -0
  102. package/src/composables/useWindowDimensions.js +21 -0
  103. package/src/composables/useZoomPrevention.js +96 -0
  104. package/src/constants/tableLayout.js +14 -0
  105. package/src/libs/Filter.js +14 -20
  106. package/src/libs/panzoom.js +1 -5
  107. package/src/libs/utils/array.js +58 -0
  108. package/src/{stores/utils.js → libs/utils/dataGeneration.js} +2 -250
  109. package/src/libs/utils/eventUrl.js +40 -0
  110. package/src/libs/utils/string.js +3 -0
  111. package/src/libs/utils/time.js +20 -0
  112. package/src/libs/utils/validation.js +64 -0
  113. package/src/main.js +0 -2
  114. package/src/stores/connection.js +1 -29
  115. package/src/stores/logger.js +6 -12
  116. package/src/stores/sampleData.js +1 -2
  117. package/src/stores/ui.js +80 -71
  118. package/src/utils/tableHelpers.js +1 -0
  119. package/src/views/Accounts.vue +19 -38
  120. package/src/views/Console.vue +74 -253
  121. package/src/views/Editor.vue +47 -1114
  122. package/src/views/FilterBuilder.vue +190 -461
  123. package/src/views/Login.vue +3 -28
  124. package/src/views/Profiles.vue +17 -32
  125. package/src/views/Tasks.vue +51 -38
  126. package/tailwind.config.js +82 -71
  127. package/workbox-config.cjs +47 -5
  128. package/docs/plans/2026-02-08-tailwind-consolidation.md +0 -2438
  129. package/exit +0 -209
  130. package/run +0 -177
  131. package/src/assets/css/base/color-fallbacks.scss +0 -10
  132. package/src/assets/img/background.svg.backup +0 -11
  133. package/src/components/icons/SquareCheck.vue +0 -18
  134. package/src/components/icons/SquareUncheck.vue +0 -18
  135. package/src/components/ui/controls/atomic/LoadingButton.vue +0 -45
  136. package/switch-branch.sh +0 -41
  137. /package/public/{reconnect-logo.png → img/reconnect-logo.png} +0 -0
@@ -8,7 +8,7 @@
8
8
  </template>
9
9
 
10
10
  <!-- Task Form -->
11
- <div class="grid-responsive-1-2 gap-responsive mb-4 mt-4">
11
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4 mt-4">
12
12
  <!-- Event ID -->
13
13
  <FormField label="Event ID" :icon="StadiumIcon" required>
14
14
  <input
@@ -43,30 +43,12 @@
43
43
  </FormField>
44
44
 
45
45
  <!-- Task Amount -->
46
- <div class="input-wrapper">
47
- <label class="label-override mb-2">
48
- Amount
49
- <span class="ml-2 h-[18px]">#</span>
50
- </label>
51
- <div class="input-default">
52
- <input placeholder="20" min="1" type="number" pattern="\d*" v-model="task.taskQuantity" />
53
- <div class="input-incrementer">
54
- <button @click="task.taskQuantity++">
55
- <UpIcon />
56
- </button>
57
- <button @click="if (task.taskQuantity > 1) task.taskQuantity--;">
58
- <DownIcon />
59
- </button>
60
- </div>
61
- </div>
62
- </div>
46
+ <FormField label="Amount" :icon="HashIcon" incrementer @increment="task.taskQuantity++" @decrement="task.taskQuantity > 1 && task.taskQuantity--">
47
+ <input placeholder="20" min="1" type="number" pattern="\d*" v-model="task.taskQuantity" />
48
+ </FormField>
63
49
 
64
50
  <!-- Profile Tag(s) -->
65
- <div class="input-wrapper">
66
- <label class="label-override mb-2">
67
- Profile Tag(s)
68
- <TagIcon />
69
- </label>
51
+ <FormField label="Profile Tag(s)" :icon="TagIcon" noWrapper>
70
52
  <MultiDropdown
71
53
  class="w-full will-change-auto"
72
54
  :onSelect="(v) => (task.profileTags = v)"
@@ -76,7 +58,7 @@
76
58
  return { label: opt, value: opt };
77
59
  })
78
60
  " />
79
- </div>
61
+ </FormField>
80
62
 
81
63
  <!-- CL Origin -->
82
64
  <FormField v-if="isEU(ui.currentCountry.siteId)" label="CL Origin" :icon="AwardIcon">
@@ -84,11 +66,7 @@
84
66
  </FormField>
85
67
 
86
68
  <!-- Account Tag -->
87
- <div class="input-wrapper">
88
- <label class="label-override mb-2">
89
- Account Tag
90
- <ScannerIcon />
91
- </label>
69
+ <FormField label="Account Tag" :icon="ScannerIcon" noWrapper>
92
70
  <Dropdown
93
71
  :onClick="(f) => (task.accountTag = f)"
94
72
  default="Default tag"
@@ -97,7 +75,7 @@
97
75
  :allowDefault="false"
98
76
  :capitalize="true"
99
77
  class="dropdown w-full" />
100
- </div>
78
+ </FormField>
101
79
 
102
80
  <!-- Start Offset -->
103
81
  <FormField label="Start Offset (Minutes)" :icon="ShieldIcon" incrementer @increment="task.startOffset = (task.startOffset || 0) + 1" @decrement="task.startOffset > 0 && task.startOffset--">
@@ -111,150 +89,37 @@
111
89
  </div>
112
90
  <div class="mb-3 border border-dark-650" />
113
91
  <!-- Task Switches -->
114
- <div v-if="!isEU(ui.currentCountry.siteId)" class="task-switches grid grid-cols-3 justify-between gap-y-1">
115
- <div class="switch-wrapper mb-2 flex flex-col">
116
- <h4 class="text-responsive-sm">
117
- Aged
118
- <span class="hidden xs:block">Account</span>
119
- <SandclockIcon />
120
- </h4>
121
- <Switch class="mx-auto" v-model="task.agedAccount" />
122
- </div>
123
- <div class="switch-wrapper flex flex-col">
124
- <h4>
125
- Manual
126
- <HandIcon />
127
- </h4>
128
- <Switch class="mx-auto" v-model="task.manual" />
129
- </div>
130
- <div class="switch-wrapper flex flex-col">
131
- <h4>
132
- <span class="hidden xs:block">Do Not Pay</span>
133
- <span class="block xs:hidden">DNP</span>
134
- <SavingsIcon />
135
- </h4>
136
- <Switch class="mx-auto" v-model="task.doNotPay" />
137
- </div>
138
- <div class="switch-wrapper flex flex-col">
139
- <h4>
140
- <span class="hidden xs:block">Quick Queue</span>
141
- <span class="block xs:hidden">Quick Q.</span>
142
- <SkiIcon />
143
- </h4>
144
- <Switch class="mx-auto" v-model="task.quickQueue" />
145
- </div>
146
- <div class="switch-wrapper flex flex-col">
147
- <h4>
148
- <span class="hidden xs:block">Login Later</span>
149
- <span class="block xs:hidden">Login Lat.</span>
150
-
151
- <GroupIcon />
152
- </h4>
153
- <Switch class="mx-auto" v-model="task.loginAfterCart" />
154
- </div>
155
- <div class="switch-wrapper flex flex-col">
156
- <h4>
157
- <span class="hidden xs:block">Smart Timer</span>
158
- <span class="block xs:hidden">Timer</span>
159
- <TimerIcon />
160
- </h4>
161
- <Switch class="mx-auto" v-model="task.smartTimer" />
162
- </div>
163
- <div class="switch-wrapper flex flex-col">
164
- <h4>
165
- <span class="hidden xs:block">Supports</span>
166
- OTP
167
- <MailIcon class="h-[17px] scale-90" />
168
- </h4>
169
- <Switch class="mx-auto" v-model="task.otpAccount" />
170
- </div>
171
- <div class="switch-wrapper flex flex-col">
172
- <h4>
173
- Presale
174
- <span class="hidden xs:block">Queue</span>
175
- <AwardIcon class="scale-90" />
176
- </h4>
177
- <Switch class="mx-auto" v-model="task.presaleMode" />
178
- </div>
179
- <div class="switch-wrapper flex flex-col">
180
- <h4>
181
- Strict
182
- <span class="hidden xs:block">Presale</span>
183
- <AwardIcon class="scale-90" />
184
- </h4>
185
- <Switch class="mx-auto" v-model="task.presaleStrict" />
186
- </div>
92
+ <div v-if="!isEU(ui.currentCountry.siteId)" class="grid grid-cols-3 justify-between gap-y-1">
93
+ <TaskToggle class="mb-2" :icon="SandclockIcon" label="Aged Account" responsive-label="Aged" v-model="task.agedAccount" icon-class="" />
94
+ <TaskToggle :icon="HandIcon" label="Manual" v-model="task.manual" icon-class="" />
95
+ <TaskToggle :icon="SavingsIcon" label="Do Not Pay" responsive-label="DNP" v-model="task.doNotPay" icon-class="" />
96
+ <TaskToggle :icon="SkiIcon" label="Quick Queue" responsive-label="Quick Q." v-model="task.quickQueue" icon-class="" />
97
+ <TaskToggle :icon="GroupIcon" label="Login Later" responsive-label="Login Lat." v-model="task.loginAfterCart" icon-class="" />
98
+ <TaskToggle :icon="TimerIcon" label="Smart Timer" responsive-label="Timer" v-model="task.smartTimer" icon-class="" />
99
+ <TaskToggle :icon="MailIcon" label="Supports OTP" responsive-label="OTP" v-model="task.otpAccount" icon-class="h-4.25 scale-90" />
100
+ <TaskToggle :icon="AwardIcon" label="Presale Queue" responsive-label="Presale" v-model="task.presaleMode" />
101
+ <TaskToggle :icon="AwardIcon" label="Strict Presale" responsive-label="Strict" v-model="task.presaleStrict" />
187
102
  </div>
188
103
  <div v-if="isEU(ui.currentCountry.siteId)">
189
- <div class="task-switches mb-4 grid grid-cols-4 justify-between gap-y-4">
190
- <div class="switch-wrapper flex flex-col">
191
- <h4 class="text-xs">
192
- Manual
193
- <HandIcon class="scale-90" />
194
- </h4>
195
- <Switch class="mx-auto" v-model="task.manual" />
196
- </div>
197
- <div class="switch-wrapper flex flex-col">
198
- <h4>
199
- <span class="hidden xs:block">Do Not Pay</span>
200
- <span class="block xs:hidden">DNP</span>
201
- <SavingsIcon class="scale-90" />
202
- </h4>
203
- <Switch class="mx-auto" v-model="task.doNotPay" />
204
- </div>
205
- <div class="switch-wrapper flex flex-col">
206
- <h4>
207
- <span class="hidden xs:block">Smart Timer</span>
208
- <span class="block xs:hidden">Timer</span>
209
- <TimerIcon class="scale-90" />
210
- </h4>
211
- <Switch class="mx-auto" v-model="task.smartTimer" />
212
- </div>
213
- <div class="switch-wrapper flex flex-col">
214
- <h4>
215
- <span class="hidden xs:block">Login Later</span>
216
- <span class="block xs:hidden">Login Lat.</span>
217
- <GroupIcon class="scale-90" />
218
- </h4>
219
- <Switch class="mx-auto" v-model="task.loginAfterCart" />
220
- </div>
104
+ <div class="mb-4 grid grid-cols-4 justify-between gap-y-4">
105
+ <TaskToggle :icon="HandIcon" label="Manual" v-model="task.manual" />
106
+ <TaskToggle :icon="SavingsIcon" label="Do Not Pay" responsive-label="DNP" v-model="task.doNotPay" />
107
+ <TaskToggle :icon="TimerIcon" label="Smart Timer" responsive-label="Timer" v-model="task.smartTimer" />
108
+ <TaskToggle :icon="GroupIcon" label="Login Later" responsive-label="Login Lat." v-model="task.loginAfterCart" />
221
109
  </div>
222
110
 
223
- <div class="task-switches grid grid-cols-4 justify-between gap-y-4">
224
- <div class="switch-wrapper flex flex-col">
225
- <h4>
226
- <span class="hidden xs:block">Quick Queue</span>
227
- <span class="block xs:hidden">Quick Q.</span>
228
- <SkiIcon class="scale-90" />
229
- </h4>
230
- <Switch class="mx-auto" v-model="task.quickQueue" />
231
- </div>
232
-
233
- <div class="switch-wrapper flex flex-col">
234
- <h4>
235
- Supports OTP
236
- <MailIcon class="h-[17px] scale-90" />
237
- </h4>
238
- <Switch class="mx-auto" v-model="task.otpAccount" />
239
- </div>
240
- <div class="switch-wrapper flex flex-col">
241
- <h4>
242
- Aged
243
- <span class="hidden xs:block">Account</span>
244
- <SandclockIcon />
245
- </h4>
246
- <Switch class="mx-auto" v-model="task.agedAccount" />
247
- </div>
111
+ <div class="grid grid-cols-4 justify-between gap-y-4">
112
+ <TaskToggle :icon="SkiIcon" label="Quick Queue" responsive-label="Quick Q." v-model="task.quickQueue" />
113
+ <TaskToggle :icon="MailIcon" label="Supports OTP" v-model="task.otpAccount" icon-class="h-4.25 scale-90" />
114
+ <TaskToggle :icon="SandclockIcon" label="Aged Account" responsive-label="Aged" v-model="task.agedAccount" icon-class="" />
248
115
  </div>
249
116
  </div>
250
117
 
251
118
  <!-- Task prefab -->
252
119
  <div class="my-3 border border-dark-650" />
253
- <button
254
- class="button-default ml-auto mt-4 bg-dark-400"
255
- @click="createTask">
120
+ <button class="btn-modal ml-auto mt-4 w-36" @click="createTask">
256
121
  Create
257
- <EditIcon />
122
+ <EditIcon class="ml-2" />
258
123
  </button>
259
124
  </Modal>
260
125
  </template>
@@ -263,7 +128,7 @@
263
128
  import { ref, watch } from "vue";
264
129
  import Modal from "@/components/ui/Modal.vue";
265
130
  import FormField from "@/components/ui/FormField.vue";
266
- import Switch from "@/components/ui/controls/atomic/Switch.vue";
131
+ import TaskToggle from "@/components/ui/TaskToggle.vue";
267
132
  import {
268
133
  MailIcon,
269
134
  CameraIcon,
@@ -279,17 +144,16 @@ import {
279
144
  TimerIcon,
280
145
  SavingsIcon,
281
146
  EditIcon,
282
- UpIcon,
283
- DownIcon,
284
147
  SandclockIcon,
285
- CartIcon,
286
148
  PencilIcon
287
149
  } from "@/components/icons";
288
150
  import { useUIStore } from "@/stores/ui";
289
151
  import { countries } from "@/stores/countries";
290
152
  import Dropdown from "@/components/ui/controls/atomic/Dropdown.vue";
291
153
  import MultiDropdown from "@/components/ui/controls/atomic/MultiDropdown.vue";
292
- import { isEU, firstUpper, parseTmEventUrl, removeDuplicates } from "@/stores/utils";
154
+ import { firstUpper } from "@/libs/utils/string";
155
+ import { isEU, parseTmEventUrl } from "@/libs/utils/eventUrl";
156
+ import { removeDuplicates } from "@/libs/utils/array";
293
157
 
294
158
  const ui = useUIStore();
295
159
 
@@ -388,23 +252,3 @@ watch(
388
252
  );
389
253
  </script>
390
254
 
391
- <style lang="scss" scoped>
392
- .label-override {
393
- @apply flex items-center;
394
- color: #e1e1e4 !important;
395
-
396
- svg {
397
- @apply ml-2;
398
-
399
- path {
400
- fill: #e1e1e4 !important;
401
- }
402
- }
403
- }
404
-
405
- .switch-wrapper {
406
- svg path {
407
- fill: oklch(0.65 0 0) !important;
408
- }
409
- }
410
- </style>
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <div v-if="content" class="flex items-start gap-1 text-3xs leading-tight-sm min-h-2.75">
3
+ <svg class="icon-sm" width="10" height="10" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
4
+ <slot name="icon"></slot>
5
+ </svg>
6
+ <span :class="['text-light-500 text-3xs leading-tight-sm', truncate ? 'truncate' : '']">{{ content }}</span>
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ defineProps({
12
+ content: {
13
+ type: String,
14
+ required: true
15
+ },
16
+ truncate: {
17
+ type: Boolean,
18
+ default: false
19
+ }
20
+ });
21
+ </script>
@@ -2,8 +2,8 @@
2
2
  <Modal>
3
3
  <template #header> Mass Edit Presale Code <i class="fa fa-edit ml-3 mt-1"></i> </template>
4
4
  <!-- Event ID -->
5
- <div class="input-wrapper mt-7 mb-4">
6
- <label class="label-override mb-2">Event ID <StadiumIcon /></label>
5
+ <div class="mt-7 mb-4">
6
+ <label class="flex mb-2 label-override">Event ID <StadiumIcon /></label>
7
7
  <div class="input-default required">
8
8
  <input
9
9
  :placeholder="!isEU(ui.currentCountry.siteId) ? '102PDA9125510GYU' : '529171'"
@@ -12,33 +12,23 @@
12
12
  </div>
13
13
  </div>
14
14
  <!-- Presale Code -->
15
- <div class="input-wrapper mb-8">
16
- <label class="label-override mb-2">Presale Code <BagIcon /></label>
15
+ <div class="mb-8">
16
+ <label class="flex mb-2 label-override">Presale Code <BagIcon /></label>
17
17
  <div class="input-default required">
18
18
  <input placeholder="presale code" v-model="code" />
19
19
  </div>
20
20
  </div>
21
- <button
22
- class="button-default bg-dark-400 w-48 text-xs flex items-center justify-center gap-x-2 ml-auto border border-light-300 hover:border-light-400"
23
- @click="done()"
24
- >
21
+ <button class="btn-modal ml-auto" @click="done()">
25
22
  Edit <EditIcon />
26
23
  </button>
27
24
  </Modal>
28
25
  </template>
29
- <style lang="scss" scoped>
30
- .input-wrapper {
31
- label {
32
- @apply flex;
33
- }
34
- }
35
- </style>
36
26
  <script setup>
37
27
  import Modal from "@/components/ui/Modal.vue";
38
28
  import { StadiumIcon, BagIcon, EditIcon } from "@/components/icons";
39
29
  import { useUIStore } from "@/stores/ui";
40
30
  import { ref } from "vue";
41
- import { isEU } from "@/stores/utils";
31
+ import { isEU } from "@/libs/utils/eventUrl";
42
32
 
43
33
  const ui = useUIStore();
44
34
  const code = ref("");