13 Commits

Author SHA1 Message Date
keven
f1e956ad4c Merge pull request 'dev/0.11' (#3) from dev/0.11 into main
Reviewed-on: https://gitea.fudaoyuan.icu/keven/015/pulls/3
2026-05-24 18:21:29 +08:00
keven1024
7793bef944 fix(FileShareResult): set staleTime to Infinity for create-share query to prevent data refetching 2026-05-24 18:20:28 +08:00
keven1024
1fdd05f0ea feat(Tiptap): add internationalization support for word and length display in multiple languages 2026-05-24 18:18:20 +08:00
keven1024
7128a8c329 feat(Toaster): implement Sonner component for enhanced notification functionality and update import path in default layout 2026-05-24 17:55:19 +08:00
keven1024
3cb878b770 chore(dependencies): add nuxt-lucide-icons@2.1.0 to pnpm-lock.yaml and import Button component in BaseCard.vue for enhanced UI functionality 2026-05-24 14:49:01 +08:00
keven1024
05c3504627 feat(AboutBaseInfo): integrate Avatar, Accordion, and MarkdownRender components for enhanced UI functionality 2026-05-24 14:47:48 +08:00
keven1024
9b1ba13ec3 chore(dependencies): add nuxt-lucide-icons package to enhance icon support in the project 2026-05-24 14:43:01 +08:00
keven1024
2a4fac717a chore(dependencies): update TypeScript, @vueuse/core, and @vueuse/nuxt to 6.0.3 and 14.3.0 respectively, and upgrade various packages in package.json and pnpm-lock.yaml for improved compatibility and functionality 2026-05-24 14:37:07 +08:00
keven1024
e897fe1ed3 chore(dependencies): downgrade markdown-it to 14.1.1 in package.json and pnpm-lock.yaml for consistency and compatibility 2026-05-24 14:26:14 +08:00
keven1024
0aae4c2d36 chore(dependencies): downgrade @tanstack/vue-query and @tanstack/query-core to 5.100.13, update tinyexec to 1.1.2, and add markdown-it@14.1.1 in pnpm-lock.yaml for consistency and compatibility 2026-05-24 14:16:39 +08:00
keven1024
549bdd9f68 chore(dependencies): replace lucide-vue-next imports with @lucide/vue across multiple components for consistency and improved dependency management 2026-05-24 14:06:03 +08:00
keven1024
f956130b4f chore(dependencies): replace lucide-vue-next with @lucide/vue in package.json and update lint workflow for improved dependency management 2026-05-24 14:03:49 +08:00
keven1024
218b4cc6ac chore(dependencies): add @lucide/vue@1.16.0 and update @tanstack/vue-query to 5.100.12 in package.json and pnpm-lock.yaml for enhanced functionality 2026-05-24 13:57:07 +08:00
43 changed files with 557 additions and 381 deletions

View File

@@ -13,10 +13,11 @@ jobs:
node-version: '24' node-version: '24'
- uses: pnpm/action-setup@v4 - uses: pnpm/action-setup@v4
with: with:
cache: true version: latest
cache: true
- name: Install dependencies - name: Install dependencies
run: | run: |
pnpm install --frozen-lockfile pnpm install --frozen-lockfile
- name: Run frontend lint - name: Run frontend lint
run: pnpm lint:front run: pnpm lint:front

View File

@@ -8,6 +8,9 @@ import Progress from '~/components/ui/progress/Progress.vue'
import renderI18n from '~/lib/renderI18n' import renderI18n from '~/lib/renderI18n'
import { I18nT } from 'vue-i18n' import { I18nT } from 'vue-i18n'
import { calcNativeHash } from '~/lib/calcFileHash' import { calcNativeHash } from '~/lib/calcFileHash'
import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@/components/ui/accordion'
import MarkdownRender from '@/components/MarkdownRender.vue'
const { locale } = useI18n() const { locale } = useI18n()
const appConfig = useMyAppConfig() const appConfig = useMyAppConfig()

View File

@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Button } from '@/components/ui/button'
const props = defineProps<{ const props = defineProps<{
title?: string title?: string
showBackButton?: boolean showBackButton?: boolean

View File

@@ -2,7 +2,7 @@
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import asyncWait from '~/lib/asyncWait' import asyncWait from '~/lib/asyncWait'
import { toast } from 'vue-sonner' import { toast } from 'vue-sonner'
import { LucideCheck, LucideCopy } from 'lucide-vue-next' import { LucideCheck, LucideCopy } from '@lucide/vue'
const isCopy = ref(false) const isCopy = ref(false)
const props = defineProps<{ const props = defineProps<{

View File

@@ -3,7 +3,7 @@ import FileUpload from '@/components/FileUpload.vue'
import { cx } from 'class-variance-authority' import { cx } from 'class-variance-authority'
import type { RuleExpression } from 'vee-validate' import type { RuleExpression } from 'vee-validate'
import Button from '../ui/button/Button.vue' import Button from '../ui/button/Button.vue'
import { PlusIcon } from 'lucide-vue-next' import { PlusIcon } from '@lucide/vue'
import { isEmpty } from 'lodash-es' import { isEmpty } from 'lodash-es'
const props = defineProps<{ const props = defineProps<{

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { LucideFileAudio, LucideFileVideo, LucideFile, LucideFileCode, LucideFileArchive, LucideFileText } from 'lucide-vue-next' import { LucideFileAudio, LucideFileVideo, LucideFile, LucideFileCode, LucideFileArchive, LucideFileText } from '@lucide/vue'
import type { filePreview } from './Index.vue' import type { filePreview } from './Index.vue'
const props = defineProps<{ const props = defineProps<{

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { LucideSquare, LucideInfo, LucideFolders, LucideArrowUpFromLine, LucideCircleX, LucideCheckCircle, LucideLoaderCircle } from 'lucide-vue-next' import { LucideSquare, LucideInfo, LucideFolders, LucideArrowUpFromLine, LucideCircleX, LucideCheckCircle, LucideLoaderCircle } from '@lucide/vue'
import Button from '@/components/ui/button/Button.vue' import Button from '@/components/ui/button/Button.vue'
import getFileSize from '~/lib/getFileSize' import getFileSize from '~/lib/getFileSize'

View File

@@ -22,9 +22,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { cx } from 'class-variance-authority' import { cx } from 'class-variance-authority'
import { LucideClipboardType, LucidePaperclip } from '#components'
import { motion } from 'motion-v' import { motion } from 'motion-v'
import { LucideGlobe } from 'lucide-vue-next' import { LucideGlobe, LucideClipboardType, LucidePaperclip } from '@lucide/vue'
import showDrawer from '@/lib/showDrawer' import showDrawer from '@/lib/showDrawer'
import I18nSwitchDrawer from './Drawer/I18nSwitchDrawer.vue' import I18nSwitchDrawer from './Drawer/I18nSwitchDrawer.vue'
const { t } = useI18n() const { t } = useI18n()

View File

@@ -21,6 +21,7 @@ const { t } = useI18n()
const { createFileShare } = useMyAppShare() const { createFileShare } = useMyAppShare()
const { data } = useQuery({ const { data } = useQuery({
queryKey: ['create-share', ...props?.data?.files?.map((item) => item.id)], queryKey: ['create-share', ...props?.data?.files?.map((item) => item.id)],
staleTime: Infinity,
queryFn: async () => { queryFn: async () => {
const { files, config } = props?.data || {} const { files, config } = props?.data || {}
const data = await createFileShare({ const data = await createFileShare({

View File

@@ -4,7 +4,7 @@ import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration' import duration from 'dayjs/plugin/duration'
import relativeTime from 'dayjs/plugin/relativeTime' import relativeTime from 'dayjs/plugin/relativeTime'
import { isBoolean } from 'lodash-es' import { isBoolean } from 'lodash-es'
import { LucideCheck, LucideX } from 'lucide-vue-next' import { LucideCheck, LucideX } from '@lucide/vue'
import { useQueryClient } from '@tanstack/vue-query' import { useQueryClient } from '@tanstack/vue-query'
import showDrawer from '~/lib/showDrawer' import showDrawer from '~/lib/showDrawer'
import { toast } from 'vue-sonner' import { toast } from 'vue-sonner'

View File

@@ -4,7 +4,7 @@ import AsyncButton from '@/components/ui/button/AsyncButton.vue'
import duration from 'dayjs/plugin/duration' import duration from 'dayjs/plugin/duration'
import relativeTime from 'dayjs/plugin/relativeTime' import relativeTime from 'dayjs/plugin/relativeTime'
import { isBoolean } from 'lodash-es' import { isBoolean } from 'lodash-es'
import { LucideCheck, LucideX } from 'lucide-vue-next' import { LucideCheck, LucideX } from '@lucide/vue'
import { cx } from 'class-variance-authority' import { cx } from 'class-variance-authority'
import { toast } from 'vue-sonner' import { toast } from 'vue-sonner'
import MarkdownRender from '@/components/MarkdownRender.vue' import MarkdownRender from '@/components/MarkdownRender.vue'

View File

@@ -5,6 +5,7 @@ import { Markdown } from 'tiptap-markdown'
import Placeholder from '@tiptap/extension-placeholder' import Placeholder from '@tiptap/extension-placeholder'
import { cx } from 'class-variance-authority' import { cx } from 'class-variance-authority'
import countWords from '@/lib/countWords' import countWords from '@/lib/countWords'
const { t } = useI18n()
const props = defineProps<{ const props = defineProps<{
modelValue?: string modelValue?: string
@@ -64,6 +65,6 @@ onUnmounted(() => {
v-if="modelValue?.length && modelValue?.length > 0" v-if="modelValue?.length && modelValue?.length > 0"
class="absolute bottom-2 right-3 flex justify-end px-2 py-1 text-xs text-gray-400 select-none bg-white rounded-md" class="absolute bottom-2 right-3 flex justify-end px-2 py-1 text-xs text-gray-400 select-none bg-white rounded-md"
> >
{{ `${modelValue?.length ?? 0} 长度 · ${countWords(modelValue ?? '')} 字符` }} {{ `${modelValue?.length ?? 0} ${t('common.length')} · ${countWords(modelValue ?? '')} ${t('common.words')}` }}
</div> </div>
</template> </template>

View File

@@ -2,7 +2,7 @@
import type { AccordionTriggerProps } from 'reka-ui' import type { AccordionTriggerProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronDown } from 'lucide-vue-next' import { ChevronDown } from '@lucide/vue'
import { AccordionHeader, AccordionTrigger } from 'reka-ui' import { AccordionHeader, AccordionTrigger } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { ListboxFilterProps } from 'reka-ui' import type { ListboxFilterProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Search } from 'lucide-vue-next' import { Search } from '@lucide/vue'
import { ListboxFilter, useForwardProps } from 'reka-ui' import { ListboxFilter, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { useCommand } from '.' import { useCommand } from '.'

View File

@@ -2,7 +2,7 @@
import type { DialogContentEmits, DialogContentProps } from 'reka-ui' import type { DialogContentEmits, DialogContentProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { X } from 'lucide-vue-next' import { X } from '@lucide/vue'
import { DialogClose, DialogContent, DialogPortal, useForwardPropsEmits } from 'reka-ui' import { DialogClose, DialogContent, DialogPortal, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import DialogOverlay from './DialogOverlay.vue' import DialogOverlay from './DialogOverlay.vue'

View File

@@ -2,7 +2,7 @@
import type { DialogContentEmits, DialogContentProps } from 'reka-ui' import type { DialogContentEmits, DialogContentProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { X } from 'lucide-vue-next' import { X } from '@lucide/vue'
import { DialogClose, DialogContent, DialogOverlay, DialogPortal, useForwardPropsEmits } from 'reka-ui' import { DialogClose, DialogContent, DialogOverlay, DialogPortal, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { DropdownMenuCheckboxItemEmits, DropdownMenuCheckboxItemProps } from 'reka-ui' import type { DropdownMenuCheckboxItemEmits, DropdownMenuCheckboxItemProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Check } from 'lucide-vue-next' import { Check } from '@lucide/vue'
import { DropdownMenuCheckboxItem, DropdownMenuItemIndicator, useForwardPropsEmits } from 'reka-ui' import { DropdownMenuCheckboxItem, DropdownMenuItemIndicator, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { DropdownMenuRadioItemEmits, DropdownMenuRadioItemProps } from 'reka-ui' import type { DropdownMenuRadioItemEmits, DropdownMenuRadioItemProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Circle } from 'lucide-vue-next' import { Circle } from '@lucide/vue'
import { DropdownMenuItemIndicator, DropdownMenuRadioItem, useForwardPropsEmits } from 'reka-ui' import { DropdownMenuItemIndicator, DropdownMenuRadioItem, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { DropdownMenuSubTriggerProps } from 'reka-ui' import type { DropdownMenuSubTriggerProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronRight } from 'lucide-vue-next' import { ChevronRight } from '@lucide/vue'
import { DropdownMenuSubTrigger, useForwardProps } from 'reka-ui' import { DropdownMenuSubTrigger, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { MenubarCheckboxItemEmits, MenubarCheckboxItemProps } from 'reka-ui' import type { MenubarCheckboxItemEmits, MenubarCheckboxItemProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Check } from 'lucide-vue-next' import { Check } from '@lucide/vue'
import { MenubarCheckboxItem, MenubarItemIndicator, useForwardPropsEmits } from 'reka-ui' import { MenubarCheckboxItem, MenubarItemIndicator, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { MenubarRadioItemEmits, MenubarRadioItemProps } from 'reka-ui' import type { MenubarRadioItemEmits, MenubarRadioItemProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Circle } from 'lucide-vue-next' import { Circle } from '@lucide/vue'
import { MenubarItemIndicator, MenubarRadioItem, useForwardPropsEmits } from 'reka-ui' import { MenubarItemIndicator, MenubarRadioItem, useForwardPropsEmits } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { MenubarSubTriggerProps } from 'reka-ui' import type { MenubarSubTriggerProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronRight } from 'lucide-vue-next' import { ChevronRight } from '@lucide/vue'
import { MenubarSubTrigger, useForwardProps } from 'reka-ui' import { MenubarSubTrigger, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Minus } from 'lucide-vue-next' import { Minus } from '@lucide/vue'
import { Primitive, type PrimitiveProps, useForwardProps } from 'reka-ui' import { Primitive, type PrimitiveProps, useForwardProps } from 'reka-ui'
const props = defineProps<PrimitiveProps>() const props = defineProps<PrimitiveProps>()
@@ -7,12 +7,9 @@ const forwardedProps = useForwardProps(props)
</script> </script>
<template> <template>
<Primitive <Primitive data-slot="pin-input-separator" v-bind="forwardedProps">
data-slot="pin-input-separator" <slot>
v-bind="forwardedProps" <Minus />
> </slot>
<slot> </Primitive>
<Minus />
</slot>
</Primitive>
</template> </template>

View File

@@ -2,7 +2,7 @@
import type { SelectItemProps } from 'reka-ui' import type { SelectItemProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { Check } from 'lucide-vue-next' import { Check } from '@lucide/vue'
import { SelectItem, SelectItemIndicator, SelectItemText, useForwardProps } from 'reka-ui' import { SelectItem, SelectItemIndicator, SelectItemText, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { SelectScrollDownButtonProps } from 'reka-ui' import type { SelectScrollDownButtonProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronDown } from 'lucide-vue-next' import { ChevronDown } from '@lucide/vue'
import { SelectScrollDownButton, useForwardProps } from 'reka-ui' import { SelectScrollDownButton, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { SelectScrollUpButtonProps } from 'reka-ui' import type { SelectScrollUpButtonProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronUp } from 'lucide-vue-next' import { ChevronUp } from '@lucide/vue'
import { SelectScrollUpButton, useForwardProps } from 'reka-ui' import { SelectScrollUpButton, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -2,7 +2,7 @@
import type { SelectTriggerProps } from 'reka-ui' import type { SelectTriggerProps } from 'reka-ui'
import type { HTMLAttributes } from 'vue' import type { HTMLAttributes } from 'vue'
import { reactiveOmit } from '@vueuse/core' import { reactiveOmit } from '@vueuse/core'
import { ChevronDown } from 'lucide-vue-next' import { ChevronDown } from '@lucide/vue'
import { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui' import { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'

View File

@@ -0,0 +1,43 @@
<script lang="ts" setup>
import type { ToasterProps } from 'vue-sonner'
import 'vue-sonner/style.css'
import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, XIcon } from '@lucide/vue'
import { Toaster as Sonner } from 'vue-sonner'
import { cn } from '@/lib/utils'
const props = defineProps<ToasterProps>()
</script>
<template>
<Sonner
:class="cn('toaster group', props.class)"
:style="{
'--normal-bg': 'var(--popover)',
'--normal-text': 'var(--popover-foreground)',
'--normal-border': 'var(--border)',
'--border-radius': 'var(--radius)',
}"
v-bind="props"
>
<template #success-icon>
<CircleCheckIcon class="size-4" />
</template>
<template #info-icon>
<InfoIcon class="size-4" />
</template>
<template #warning-icon>
<TriangleAlertIcon class="size-4" />
</template>
<template #error-icon>
<OctagonXIcon class="size-4" />
</template>
<template #loading-icon>
<div>
<Loader2Icon class="size-4 animate-spin" />
</div>
</template>
<template #close-icon>
<XIcon class="size-4" />
</template>
</Sonner>
</template>

View File

@@ -0,0 +1 @@
export { default as Toaster } from './Sonner.vue'

View File

@@ -1,4 +1,4 @@
import { LucideShare, LucideImageMinus, LucideArrowRightLeft, LucideLanguages } from 'lucide-vue-next' import { LucideShare, LucideImageMinus, LucideArrowRightLeft, LucideLanguages } from '@lucide/vue'
import useMyAppConfig from '@/composables/useMyAppConfig' import useMyAppConfig from '@/composables/useMyAppConfig'
import type { FileHandleKey, TextHandleKey } from '../components/Preprocessing/types' import type { FileHandleKey, TextHandleKey } from '../components/Preprocessing/types'
import generateRandomColors from '@/lib/generateRandomColors' import generateRandomColors from '@/lib/generateRandomColors'

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "Hinzufügen", "add": "Hinzufügen",
"copySuccess": "Erfolgreich kopiert" "copySuccess": "Erfolgreich kopiert",
"length": "Länge",
"words": "Wörter"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "Add", "add": "Add",
"copySuccess": "Copy Success" "copySuccess": "Copy Success",
"length": "length",
"words": "words"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "Ajouter", "add": "Ajouter",
"copySuccess": "Copié avec succès" "copySuccess": "Copié avec succès",
"length": "longueur",
"words": "mots"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "追加", "add": "追加",
"copySuccess": "コピーしました" "copySuccess": "コピーしました",
"length": "長さ",
"words": "文字"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "추가", "add": "추가",
"copySuccess": "복사되었습니다" "copySuccess": "복사되었습니다",
"length": "길이",
"words": "단어"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "添加", "add": "添加",
"copySuccess": "复制成功" "copySuccess": "复制成功",
"length": "长度",
"words": "字符"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -38,7 +38,9 @@
}, },
"common": { "common": {
"add": "新增", "add": "新增",
"copySuccess": "複製成功" "copySuccess": "複製成功",
"length": "長度",
"words": "字符"
}, },
"page": { "page": {
"upload": { "upload": {

View File

@@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { Toaster } from 'vue-sonner' import { Toaster } from '@/components/ui/sonner'
const { locale } = useI18n() const { locale } = useI18n()
await useSeo({ locale: locale.value }) await useSeo({ locale: locale.value })
const appConfig = useMyAppConfig() const appConfig = useMyAppConfig()

View File

@@ -1,4 +1,5 @@
import tailwindcss from '@tailwindcss/vite' import tailwindcss from '@tailwindcss/vite'
import { defineNuxtConfig } from 'nuxt/config'
import getApiBaseUrl from './lib/getApiBaseUrl' import getApiBaseUrl from './lib/getApiBaseUrl'
// https://nuxt.com/docs/api/configuration/nuxt-config // https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({ export default defineNuxtConfig({
@@ -9,13 +10,13 @@ export default defineNuxtConfig({
// '@serwist/nuxt', // '@serwist/nuxt',
'@vueuse/nuxt', '@vueuse/nuxt',
'motion-v/nuxt', 'motion-v/nuxt',
'nuxt-lucide-icons',
'shadcn-nuxt', 'shadcn-nuxt',
'@vee-validate/nuxt', '@vee-validate/nuxt',
'@pinia/nuxt', '@pinia/nuxt',
'@nuxt/image', '@nuxt/image',
'@nuxtjs/i18n', '@nuxtjs/i18n',
'vue3-pixi-nuxt', 'vue3-pixi-nuxt',
'nuxt-lucide-icons',
], ],
// serwist: {}, // serwist: {},
i18n: { i18n: {

View File

@@ -10,12 +10,13 @@
"postinstall": "nuxt prepare" "postinstall": "nuxt prepare"
}, },
"dependencies": { "dependencies": {
"@lucide/vue": "^1.16.0",
"@nuxt/image": "^2.0.0", "@nuxt/image": "^2.0.0",
"@nuxtjs/i18n": "^10.4.0", "@nuxtjs/i18n": "^10.4.0",
"@pinia/nuxt": "^0.11.3", "@pinia/nuxt": "^0.11.3",
"@tailwindcss/postcss": "^4.3.0", "@tailwindcss/postcss": "^4.3.0",
"@tailwindcss/vite": "^4.3.0", "@tailwindcss/vite": "^4.3.0",
"@tanstack/vue-query": "^5.100.14", "@tanstack/vue-query": "^5.100.12",
"@tiptap/extension-blockquote": "^3.23.6", "@tiptap/extension-blockquote": "^3.23.6",
"@tiptap/extension-bold": "^3.23.6", "@tiptap/extension-bold": "^3.23.6",
"@tiptap/extension-bubble-menu": "^3.23.6", "@tiptap/extension-bubble-menu": "^3.23.6",
@@ -37,21 +38,19 @@
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"file-type": "^22.0.1", "file-type": "^22.0.1",
"filesize": "^10.1.6", "filesize": "^11.0.17",
"hash-wasm": "^4.12.0", "hash-wasm": "^4.12.0",
"heic-to": "^1.4.3", "heic-to": "^1.4.3",
"lodash-es": "^4.18.1", "lodash-es": "^4.18.1",
"lucide-vue-next": "^0.542.0", "markdown-it": "^14.1.1",
"markdown-it": "^14.2.0", "motion-v": "^2.2.1",
"motion-v": "^1.10.3",
"nanoid": "^5.1.11", "nanoid": "^5.1.11",
"nuxt": "4.4.6", "nuxt": "4.4.6",
"nuxt-lucide-icons": "1.0.5", "nuxt-lucide-icons": "2.1.0",
"pinia": "^3.0.4", "pinia": "^3.0.4",
"pixi.js": "^8.18.1", "pixi.js": "^8.18.1",
"qrcode": "^1.5.4", "qrcode": "^1.5.4",
"reka-ui": "^2.9.8", "reka-ui": "^2.9.8",
"shadcn-nuxt": "2.0.1",
"sweet-curl-parser": "^1.0.4", "sweet-curl-parser": "^1.0.4",
"tailwind-merge": "^3.6.0", "tailwind-merge": "^3.6.0",
"tailwindcss": "^4.3.0", "tailwindcss": "^4.3.0",
@@ -59,9 +58,8 @@
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"vaul-vue": "^0.4.1", "vaul-vue": "^0.4.1",
"vue": "^3.5.34", "vue": "^3.5.34",
"vue-router": "^4.6.4", "vue-sonner": "^2.0.9",
"vue-sonner": "^1.3.2", "vue3-pixi": "^1.0.1"
"vue3-pixi": "1.0.0-beta.2"
}, },
"resolutions": { "resolutions": {
"esbuild": "0.25.6" "esbuild": "0.25.6"
@@ -71,10 +69,11 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/markdown-it": "^14.1.2", "@types/markdown-it": "^14.1.2",
"@types/qrcode": "^1.5.6", "@types/qrcode": "^1.5.6",
"@vueuse/core": "^13.9.0", "@vueuse/core": "^14.3.0",
"@vueuse/nuxt": "^13.9.0", "@vueuse/nuxt": "^14.3.0",
"typescript": "^5.9.3", "shadcn-nuxt": "^2.7.3",
"typescript": "^6.0.3",
"vitest": "^4.1.7", "vitest": "^4.1.7",
"vue3-pixi-nuxt": "1.0.0-beta.2" "vue3-pixi-nuxt": "^1.0.1"
} }
} }

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { LucideAlertCircle } from 'lucide-vue-next' import { LucideAlertCircle } from '@lucide/vue'
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Skeleton } from '@/components/ui/skeleton' import { Skeleton } from '@/components/ui/skeleton'
import dayjs from 'dayjs' import dayjs from 'dayjs'

741
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
packages: packages:
# all packages in direct subdirs of packages/ # all packages in direct subdirs of packages/
- 'front' - 'front'
- 'pkg/*' - 'pkg/*'
# - '*' # - '*'
allowBuilds: allowBuilds:
'@parcel/watcher': true '@parcel/watcher': true
esbuild: true esbuild: true
maplibre-gl: true maplibre-gl: true
sharp: true sharp: true
vue-demi: true vue-demi: true