diff --git a/src/components.d.ts b/src/components.d.ts index cfa4c63..4e20cf6 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -8,15 +8,16 @@ declare module '@vue/runtime-core' { BaseFooter: typeof import('./components/BaseFooter.vue')['default'] ChooseFood: typeof import('./components/ChooseFood.vue')['default'] Counter: typeof import('./components/Counter.vue')['default'] - DishTag: typeof import('./components/DishTag.vue')['default'] - MeatTag: typeof import('./components/MeatTag.vue')['default'] + DishTag: typeof import('./components/tags/DishTag.vue')['default'] + MeatTag: typeof import('./components/tags/MeatTag.vue')['default'] Menu: typeof import('./components/Menu.vue')['default'] README: typeof import('./components/README.md')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] - StapleTag: typeof import('./components/StapleTag.vue')['default'] - ToolTag: typeof import('./components/ToolTag.vue')['default'] - VegetableTag: typeof import('./components/VegetableTag.vue')['default'] + StapleTag: typeof import('./components/tags/StapleTag.vue')['default'] + Switch: typeof import('./components/Switch.vue')['default'] + ToolTag: typeof import('./components/tags/ToolTag.vue')['default'] + VegetableTag: typeof import('./components/tags/VegetableTag.vue')['default'] } } diff --git a/src/components/ChooseFood.vue b/src/components/ChooseFood.vue index f73761d..5a46443 100644 --- a/src/components/ChooseFood.vue +++ b/src/components/ChooseFood.vue @@ -1,14 +1,13 @@ - - diff --git a/src/components/Switch.vue b/src/components/Switch.vue new file mode 100644 index 0000000..27115d3 --- /dev/null +++ b/src/components/Switch.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/DishTag.vue b/src/components/tags/DishTag.vue similarity index 100% rename from src/components/DishTag.vue rename to src/components/tags/DishTag.vue diff --git a/src/components/MeatTag.vue b/src/components/tags/MeatTag.vue similarity index 100% rename from src/components/MeatTag.vue rename to src/components/tags/MeatTag.vue diff --git a/src/components/StapleTag.vue b/src/components/tags/StapleTag.vue similarity index 100% rename from src/components/StapleTag.vue rename to src/components/tags/StapleTag.vue diff --git a/src/components/ToolTag.vue b/src/components/tags/ToolTag.vue similarity index 100% rename from src/components/ToolTag.vue rename to src/components/tags/ToolTag.vue diff --git a/src/components/VegetableTag.vue b/src/components/tags/VegetableTag.vue similarity index 100% rename from src/components/VegetableTag.vue rename to src/components/tags/VegetableTag.vue diff --git a/src/composables/helper.ts b/src/composables/helper.ts new file mode 100644 index 0000000..414dd8b --- /dev/null +++ b/src/composables/helper.ts @@ -0,0 +1,27 @@ +import { useElementBounding, useIntersectionObserver } from '@vueuse/core' +import type { Ref } from 'vue' +import { ref } from 'vue' + +/** + * trigger show invisible element + * @param target + * @returns + */ +export function useInvisibleElement(target: Ref) { + const isVisible = ref(false) + const { top } = useElementBounding(target) + useIntersectionObserver(target, ([{ isIntersecting }]) => { + isVisible.value = isIntersecting + }) + + const show = () => { + // scroll when collapse is not visible + if (!isVisible.value) + window.scrollTo(0, top.value) + } + + return { + isVisible, + show, + } +} diff --git a/src/stores/recipe.ts b/src/stores/recipe.ts index 7105274..de3105b 100644 --- a/src/stores/recipe.ts +++ b/src/stores/recipe.ts @@ -1,6 +1,8 @@ import { acceptHMRUpdate, defineStore } from 'pinia' export const useRecipeStore = defineStore('recipe', () => { + const strict = ref(true) + const curStuff = ref(new Set()) const curTools = ref(new Set()) @@ -34,6 +36,7 @@ export const useRecipeStore = defineStore('recipe', () => { } return { + strict, selectedTools, selectedStuff, toggleStuff,