@necrolab/dashboard 0.4.31 → 0.4.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@necrolab/dashboard",
3
- "version": "0.4.31",
3
+ "version": "0.4.33",
4
4
  "scripts": {
5
5
  "build": "rm -rf dist && vite build && npx workbox-cli generateSW workbox-config.js",
6
6
  "dev": "vite",
@@ -111,7 +111,7 @@
111
111
  :options="usStates"
112
112
  :allowDefault="false"
113
113
  rightAmount="right-2"
114
- :chosen="profile.state"
114
+ :value="profile.state"
115
115
  />
116
116
  </div>
117
117
  <div v-else :class="`input-default ${errors.includes('state') ? 'error' : ''}`">
@@ -288,11 +288,23 @@ props.filterBuilder.onUpdate(() => {
288
288
 
289
289
  <style scoped>
290
290
  .filter-card {
291
- @apply bg-dark-500 border border-dark-550 mb-1 shadow-sm relative;
291
+ @apply bg-dark-500 border-dark-550 relative;
292
+ border: 1px solid rgba(74, 74, 97, 0.3);
293
+ margin-bottom: 8px;
294
+ transition: all 0.15s ease-out;
292
295
  }
293
296
 
294
- .filter-card:not(:last-child) {
295
- border-bottom: 2px solid #1B1C2B;
297
+ .filter-card:hover:not(.expanded-filter) {
298
+ border-color: rgba(74, 74, 97, 0.6);
299
+ background-color: rgba(45, 47, 74, 0.8);
300
+ }
301
+
302
+ .expanded-filter:hover {
303
+ border-color: rgba(74, 74, 97, 0.8);
304
+ }
305
+
306
+ .filter-card + .filter-card {
307
+ border-top: 1px solid rgba(74, 74, 97, 0.2);
296
308
  }
297
309
 
298
310
  .filter-type-badge {
@@ -34,7 +34,8 @@
34
34
  <span
35
35
  class="ml-1 font-bold"
36
36
  :class="{
37
- 'text-red-400': props.task._timeLeftString === '00:00' || props.task._timeLeftString === 'No Cartholds'
37
+ 'text-red-400':
38
+ props.task._timeLeftString === '00:00' || props.task._timeLeftString === 'No Cartholds'
38
39
  }"
39
40
  >
40
41
  {{ props.task._timeLeftString !== "00:00" ? props.task._timeLeftString : "Expired" }}
@@ -46,11 +47,13 @@
46
47
  <!-- Status circle -->
47
48
  <div
48
49
  class="status-indicator mx-1 md:ml-3 ml-2"
49
- :class="colorToClass(
50
- props.task.active || props.task.status.toLowerCase() === 'idle'
51
- ? props.task.statusColor
52
- : 'red'
53
- )"
50
+ :class="
51
+ colorToClass(
52
+ props.task.active || props.task.status.toLowerCase() === 'idle'
53
+ ? props.task.statusColor
54
+ : 'red'
55
+ )
56
+ "
54
57
  ></div>
55
58
  <!-- Actual status -->
56
59
  <span class="font-bold text-sm p-1 md:mr-3 mr-2 truncate uppercase">{{
@@ -68,12 +71,12 @@
68
71
  <PlayIcon />
69
72
  </button>
70
73
  </li>
71
- <li v-if="task.status?.toLowerCase().includes('waiting') && props.task._timeLeftString !== '00:00'">
74
+ <li v-if="task.status?.toLowerCase() == 'waiting' && props.task._timeLeftString !== '00:00'">
72
75
  <button @click="ui.continueTask(task.taskId, 'autocheckout')">
73
76
  <BagWhiteIcon />
74
77
  </button>
75
78
  </li>
76
- <li v-if="task.status?.toLowerCase().includes('waiting')">
79
+ <li v-if="task.status?.toLowerCase() == 'waiting'">
77
80
  <button @click="ui.continueTask(task.taskId, 'change_reservation')">
78
81
  <EditIcon />
79
82
  </button>
@@ -83,7 +86,10 @@
83
86
  <TrashIcon />
84
87
  </button>
85
88
  </li>
86
- <li class="text-xl -mt-2" @click.right.prevent="window.setTimeout(() => ui.setOpenContextMenu(task.taskId), 10)">
89
+ <li
90
+ class="text-xl -mt-2"
91
+ @click.right.prevent="window.setTimeout(() => ui.setOpenContextMenu(task.taskId), 10)"
92
+ >
87
93
  <button class="mt-1" @click="props.task.isExpanded = !props.task.isExpanded">
88
94
  <span>{{ props.task.isExpanded ? "-" : "+" }}</span>
89
95
  </button>
@@ -100,7 +106,6 @@
100
106
  class="col-span-12 flex flex-wrap gap-x-4 gap-y-4 lg:gap-x-10 pt-8 pb-2 xl:justify-around will-change-auto"
101
107
  v-if="props.task.isExpanded"
102
108
  >
103
-
104
109
  <!-- Details -->
105
110
  <TaskLabel
106
111
  class="md:hidden"
@@ -180,15 +185,15 @@ h4 {
180
185
 
181
186
  .task-buttons {
182
187
  @apply flex mx-auto gap-x-2;
183
-
188
+
184
189
  button {
185
190
  @apply p-1 rounded transition-colors hover:bg-dark-500;
186
191
  }
187
-
192
+
188
193
  svg {
189
194
  @apply w-4 h-4;
190
195
  }
191
-
196
+
192
197
  img {
193
198
  @apply w-4 h-4;
194
199
  }
@@ -198,15 +203,15 @@ h4 {
198
203
  h4 {
199
204
  font-size: 10px;
200
205
  }
201
-
206
+
202
207
  .task-buttons {
203
208
  @apply gap-x-1;
204
209
  }
205
-
210
+
206
211
  .task-id {
207
212
  font-size: 6px;
208
213
  }
209
-
214
+
210
215
  .task-id-alt {
211
216
  font-size: 7px;
212
217
  }
@@ -30,7 +30,7 @@
30
30
  </template>
31
31
 
32
32
  <script setup>
33
- import { ref, computed } from "vue";
33
+ import { ref, computed, watch } from "vue";
34
34
  import { DownIcon, CheckmarkIcon } from "@/components/icons";
35
35
  import { useUIStore } from "@/stores/ui";
36
36
  const ui = useUIStore();
@@ -47,6 +47,11 @@ const props = defineProps({
47
47
  });
48
48
 
49
49
  const currentValue = ref(props.value);
50
+
51
+ // Watch for changes to the value prop and update currentValue
52
+ watch(() => props.value, (newValue) => {
53
+ currentValue.value = newValue;
54
+ });
50
55
  const id = Math.random();
51
56
  const opened = computed(() => ui.currentDropdown === id);
52
57
 
package/src/stores/ui.js CHANGED
@@ -236,7 +236,10 @@ export const useUIStore = defineStore("ui", () => {
236
236
  queueStats.value.sleeping = relevantTasks.filter((t) =>
237
237
  sleepingStatuses.includes(t.status.toLowerCase())
238
238
  ).length;
239
- const positions = relevantTasks.map((t) => t.queuePosition).filter((e) => !isNaN(e));
239
+ const positions = relevantTasks
240
+ .map((t) => t.queuePosition)
241
+ .filter((e) => !isNaN(e))
242
+ .filter(Boolean);
240
243
  queueStats.value.nextQueuePasses = positions.sort((a, b) => a - b);
241
244
  };
242
245
 
@@ -356,7 +356,10 @@ const hasWildcardFilter = computed(() => {
356
356
 
357
357
  const addWildcardFilter = () => {
358
358
  if (!hasWildcardFilter.value) {
359
+ // Close any expanded filter first
360
+ filterBuilder.value.setExpandedFilter(null);
359
361
  filterBuilder.value.addFilter({ buyAny: true, eventId: filterBuilder.value.currentEventId });
362
+ filterBuilder.value.updateCss();
360
363
  }
361
364
  };
362
365
 
@@ -636,7 +639,8 @@ watch(renderSeats, async () => {
636
639
 
637
640
  /* Enhanced table and filter styling */
638
641
  .filters-container {
639
- @apply space-y-1;
642
+ @apply space-y-0;
643
+ padding: 4px;
640
644
  }
641
645
 
642
646
  /* Dragging states for better UX */