diff --git a/package-lock.json b/package-lock.json index 1df6156..733f97d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "@headlessui/vue": "^1.7.3", + "@heroicons/vue": "^2.0.12", "@intlify/vite-plugin-vue-i18n": "^6.0.3", "console-stamp": "^3.0.6", "cron": "^2.1.0", @@ -115,6 +116,14 @@ "vue": "^3.2.0" } }, + "node_modules/@heroicons/vue": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.0.12.tgz", + "integrity": "sha512-ypuQl/Wei7BoShO65AdRVikXDaSt6hJBRuKs2pVd/6HvxfEz18oXraH+J5G/QPIwObMEVhMb6nkOs9l3WZv/gA==", + "peerDependencies": { + "vue": ">= 3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", @@ -4894,6 +4903,12 @@ "integrity": "sha512-Is4iakKts9u9E0+jEZNzoJpBjwq2SamwEIoEl2RlyYSu6Zco536GsPXaQEfg/o7Eyc1GUUlcL+dJd4Rt7qyf7A==", "requires": {} }, + "@heroicons/vue": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.0.12.tgz", + "integrity": "sha512-ypuQl/Wei7BoShO65AdRVikXDaSt6hJBRuKs2pVd/6HvxfEz18oXraH+J5G/QPIwObMEVhMb6nkOs9l3WZv/gA==", + "requires": {} + }, "@humanwhocodes/config-array": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", diff --git a/package.json b/package.json index dfa7f18..f58ffe3 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "@headlessui/vue": "^1.7.3", + "@heroicons/vue": "^2.0.12", "@intlify/vite-plugin-vue-i18n": "^6.0.3", "console-stamp": "^3.0.6", "cron": "^2.1.0", diff --git a/src/components/ModalDialog.vue b/src/components/ModalDialog.vue index 883922d..cabc012 100644 --- a/src/components/ModalDialog.vue +++ b/src/components/ModalDialog.vue @@ -7,12 +7,12 @@
-
+
+ enter-from="opacity-0 translate-y-0 scale-95" + enter-to="opacity-100 translate-y-0 scale-100" leave="ease-in duration-200" + leave-from="opacity-100 translate-y-0 scale-100" + leave-to="opacity-0 translate-y-0 scale-95"> diff --git a/src/components/StageDialog.vue b/src/components/StageDialog.vue new file mode 100644 index 0000000..f71c50e --- /dev/null +++ b/src/components/StageDialog.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/components/StageImage.vue b/src/components/StageImage.vue index 51651ce..e4966c2 100644 --- a/src/components/StageImage.vue +++ b/src/components/StageImage.vue @@ -1,5 +1,5 @@ diff --git a/src/stores/schedules.mjs b/src/stores/schedules.mjs index 03e783f..0529401 100644 --- a/src/stores/schedules.mjs +++ b/src/stores/schedules.mjs @@ -6,10 +6,20 @@ import { useTimeStore } from "./time.mjs"; // Schedule store definition (used for each type of schedule) function defineScheduleStore(id, options) { return defineStore(`schedules/${id}`, () => { - const transform = node => ({ - ...node, - settings: options.settings(node), - }); + const transform = (node) => { + node = { + ...node, + settings: options.settings(node), + }; + + // Move the thumbnail image to "thumbnailImage" and pull in the high-res image for the stage + for (let stage of node.settings.vsStages || []) { + stage.thumbnailImage = stage.image; + stage.image = findStageImage(stage.id) || stage.image; + } + + return node; + }; const time = useTimeStore(); const schedules = computed(() => options.nodes()?.map(n => transform(n))); @@ -22,6 +32,12 @@ function defineScheduleStore(id, options) { }); } +function findStageImage(id) { + return useSchedulesDataStore().data + ?.vsStages.nodes.find(s => s.id === id) + ?.originalImage; +} + // Regular Battle export const useRegularSchedulesStore = defineScheduleStore('regular', { nodes: () => useSchedulesDataStore().data?.regularSchedules.nodes,