-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #36 from Open-Webtoon-Reader/improvement/data-saving
Merge data saving to Main
- Loading branch information
Showing
21 changed files
with
2,560 additions
and
2,217 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
<script setup lang="ts"> | ||
import { DialogRoot, type DialogRootEmits, type DialogRootProps, useForwardPropsEmits } from 'radix-vue' | ||
const props = defineProps<DialogRootProps>() | ||
const emits = defineEmits<DialogRootEmits>() | ||
const forwarded = useForwardPropsEmits(props, emits) | ||
</script> | ||
|
||
<template> | ||
<DialogRoot v-bind="forwarded"> | ||
<slot /> | ||
</DialogRoot> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<script setup lang="ts"> | ||
import { DialogClose, type DialogCloseProps } from 'radix-vue' | ||
const props = defineProps<DialogCloseProps>() | ||
</script> | ||
|
||
<template> | ||
<DialogClose v-bind="props"> | ||
<slot /> | ||
</DialogClose> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<script setup lang="ts"> | ||
import { type HTMLAttributes, computed } from 'vue' | ||
import { | ||
DialogClose, | ||
DialogContent, | ||
type DialogContentEmits, | ||
type DialogContentProps, | ||
DialogOverlay, | ||
DialogPortal, | ||
useForwardPropsEmits, | ||
} from 'radix-vue' | ||
import { X } from 'lucide-vue-next' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<DialogContentProps & { class?: HTMLAttributes['class'] }>() | ||
const emits = defineEmits<DialogContentEmits>() | ||
const delegatedProps = computed(() => { | ||
const { class: _, ...delegated } = props | ||
return delegated | ||
}) | ||
const forwarded = useForwardPropsEmits(delegatedProps, emits) | ||
</script> | ||
|
||
<template> | ||
<DialogPortal> | ||
<DialogOverlay | ||
class="fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" | ||
/> | ||
<DialogContent | ||
v-bind="forwarded" | ||
:class=" | ||
cn( | ||
'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg', | ||
props.class, | ||
)" | ||
> | ||
<slot /> | ||
|
||
<DialogClose | ||
class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground" | ||
> | ||
<X class="w-4 h-4" /> | ||
<span class="sr-only">Close</span> | ||
</DialogClose> | ||
</DialogContent> | ||
</DialogPortal> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<script setup lang="ts"> | ||
import { type HTMLAttributes, computed } from 'vue' | ||
import { DialogDescription, type DialogDescriptionProps, useForwardProps } from 'radix-vue' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<DialogDescriptionProps & { class?: HTMLAttributes['class'] }>() | ||
const delegatedProps = computed(() => { | ||
const { class: _, ...delegated } = props | ||
return delegated | ||
}) | ||
const forwardedProps = useForwardProps(delegatedProps) | ||
</script> | ||
|
||
<template> | ||
<DialogDescription | ||
v-bind="forwardedProps" | ||
:class="cn('text-sm text-muted-foreground', props.class)" | ||
> | ||
<slot /> | ||
</DialogDescription> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<script setup lang="ts"> | ||
import type { HTMLAttributes } from 'vue' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<{ class?: HTMLAttributes['class'] }>() | ||
</script> | ||
|
||
<template> | ||
<div | ||
:class=" | ||
cn( | ||
'flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-x-2', | ||
props.class, | ||
) | ||
" | ||
> | ||
<slot /> | ||
</div> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<script setup lang="ts"> | ||
import type { HTMLAttributes } from 'vue' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<{ | ||
class?: HTMLAttributes['class'] | ||
}>() | ||
</script> | ||
|
||
<template> | ||
<div | ||
:class="cn('flex flex-col gap-y-1.5 text-center sm:text-left', props.class)" | ||
> | ||
<slot /> | ||
</div> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
<script setup lang="ts"> | ||
import { type HTMLAttributes, computed } from 'vue' | ||
import { | ||
DialogClose, | ||
DialogContent, | ||
type DialogContentEmits, | ||
type DialogContentProps, | ||
DialogOverlay, | ||
DialogPortal, | ||
useForwardPropsEmits, | ||
} from 'radix-vue' | ||
import { X } from 'lucide-vue-next' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<DialogContentProps & { class?: HTMLAttributes['class'] }>() | ||
const emits = defineEmits<DialogContentEmits>() | ||
const delegatedProps = computed(() => { | ||
const { class: _, ...delegated } = props | ||
return delegated | ||
}) | ||
const forwarded = useForwardPropsEmits(delegatedProps, emits) | ||
</script> | ||
|
||
<template> | ||
<DialogPortal> | ||
<DialogOverlay | ||
class="fixed inset-0 z-50 grid place-items-center overflow-y-auto bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" | ||
> | ||
<DialogContent | ||
:class=" | ||
cn( | ||
'relative z-50 grid w-full max-w-lg my-8 gap-4 border border-border bg-background p-6 shadow-lg duration-200 sm:rounded-lg md:w-full', | ||
props.class, | ||
) | ||
" | ||
v-bind="forwarded" | ||
@pointer-down-outside="(event) => { | ||
const originalEvent = event.detail.originalEvent; | ||
const target = originalEvent.target as HTMLElement; | ||
if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) { | ||
event.preventDefault(); | ||
} | ||
}" | ||
> | ||
<slot /> | ||
|
||
<DialogClose | ||
class="absolute top-3 right-3 p-0.5 transition-colors rounded-md hover:bg-secondary" | ||
> | ||
<X class="w-4 h-4" /> | ||
<span class="sr-only">Close</span> | ||
</DialogClose> | ||
</DialogContent> | ||
</DialogOverlay> | ||
</DialogPortal> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<script setup lang="ts"> | ||
import { type HTMLAttributes, computed } from 'vue' | ||
import { DialogTitle, type DialogTitleProps, useForwardProps } from 'radix-vue' | ||
import { cn } from '@/lib/utils' | ||
const props = defineProps<DialogTitleProps & { class?: HTMLAttributes['class'] }>() | ||
const delegatedProps = computed(() => { | ||
const { class: _, ...delegated } = props | ||
return delegated | ||
}) | ||
const forwardedProps = useForwardProps(delegatedProps) | ||
</script> | ||
|
||
<template> | ||
<DialogTitle | ||
v-bind="forwardedProps" | ||
:class=" | ||
cn( | ||
'text-lg font-semibold leading-none tracking-tight', | ||
props.class, | ||
) | ||
" | ||
> | ||
<slot /> | ||
</DialogTitle> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<script setup lang="ts"> | ||
import { DialogTrigger, type DialogTriggerProps } from 'radix-vue' | ||
const props = defineProps<DialogTriggerProps>() | ||
</script> | ||
|
||
<template> | ||
<DialogTrigger v-bind="props"> | ||
<slot /> | ||
</DialogTrigger> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
export { default as Dialog } from './Dialog.vue' | ||
export { default as DialogClose } from './DialogClose.vue' | ||
export { default as DialogTrigger } from './DialogTrigger.vue' | ||
export { default as DialogHeader } from './DialogHeader.vue' | ||
export { default as DialogTitle } from './DialogTitle.vue' | ||
export { default as DialogDescription } from './DialogDescription.vue' | ||
export { default as DialogContent } from './DialogContent.vue' | ||
export { default as DialogScrollContent } from './DialogScrollContent.vue' | ||
export { default as DialogFooter } from './DialogFooter.vue' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,40 @@ | ||
<script setup lang="ts"> | ||
import {sumToImageUrl} from "~/utils/api"; | ||
import {Collapsible} from "~/components/ui/collapsible"; | ||
import {Badge} from "~/components/ui/badge"; | ||
import {isEpisodeStarted} from "~/utils/storage"; | ||
const {episode} = defineProps<{ | ||
episode: any, | ||
}>(); | ||
const isStarted = ref<boolean>(isEpisodeStarted(episode.id)); | ||
</script> | ||
|
||
<template> | ||
<Collapsible> | ||
<div id="main" class="flex items-center cursor-pointer" @click="navigateTo(`/episode/${episode.id}`)"> | ||
<NuxtImg :src="sumToImageUrl(episode.thumbnail)" loading="lazy" format="webp" class="aspect-square h-20 sm:h-24 md:h-28 xl:h-32"/> | ||
<div id="infos" class="flex items-center w-full justify-between pl-2 pr-4 h-20 sm:h-24 md:h-28 xl:h-32"> | ||
<div id="text-infos" class="flex flex-col w-full h-full justify-center"> | ||
<div class="flex flex-row justify-between items-center"> | ||
<div id="title" class="flex flex-row gap-2"> | ||
<div v-if="episode.isNew" class="flex items-center"> | ||
<Badge v-if="episode.isNew" variant="default">New</Badge> | ||
</div> | ||
<h4 class="whitespace-nowrap truncate max-w-64">{{ episode.title }}</h4> | ||
</div> | ||
<div id="number"> | ||
<p class="opacity-30">#{{ episode.number }}</p> | ||
<div id="main" class="flex items-center cursor-pointer hover:!bg-inherit" :class="{started: isStarted}" @click="navigateTo(`/episode/${episode.id}`)"> | ||
<NuxtImg :src="sumToImageUrl(episode.thumbnail)" loading="lazy" format="webp" class="aspect-square h-20 sm:h-24 md:h-28 xl:h-32"/> | ||
<div id="infos" class="flex items-center w-full justify-between pl-2 pr-4 h-20 sm:h-24 md:h-28 xl:h-32"> | ||
<div id="text-infos" class="flex flex-col w-full h-full justify-center"> | ||
<div class="flex flex-row justify-between items-center"> | ||
<div id="title" class="flex flex-row gap-2"> | ||
<div v-if="episode.isNew" class="flex items-center"> | ||
<Badge v-if="episode.isNew" variant="default">New</Badge> | ||
</div> | ||
<h4 class="whitespace-nowrap truncate max-w-64">{{ episode.title }}</h4> | ||
</div> | ||
<div id="number"> | ||
<p class="opacity-30">#{{ episode.number }}</p> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</Collapsible> | ||
</div> | ||
</template> | ||
|
||
<style scoped> | ||
.started{ | ||
@apply bg-secondary-disabled; | ||
} | ||
</style> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.