mirror of
https://github.com/keven1024/015.git
synced 2026-06-07 12:54:34 +00:00
Compare commits
13 Commits
0.11.0-rc.
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1e956ad4c | ||
|
|
7793bef944 | ||
|
|
1fdd05f0ea | ||
|
|
7128a8c329 | ||
|
|
3cb878b770 | ||
|
|
05c3504627 | ||
|
|
9b1ba13ec3 | ||
|
|
2a4fac717a | ||
|
|
e897fe1ed3 | ||
|
|
0aae4c2d36 | ||
|
|
549bdd9f68 | ||
|
|
f956130b4f | ||
|
|
218b4cc6ac |
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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<{
|
||||||
|
|||||||
@@ -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<{
|
||||||
|
|||||||
@@ -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<{
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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 '.'
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
43
front/components/ui/sonner/Sonner.vue
Normal file
43
front/components/ui/sonner/Sonner.vue
Normal 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>
|
||||||
1
front/components/ui/sonner/index.ts
Normal file
1
front/components/ui/sonner/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export { default as Toaster } from './Sonner.vue'
|
||||||
@@ -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'
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
@@ -38,7 +38,9 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"add": "Add",
|
"add": "Add",
|
||||||
"copySuccess": "Copy Success"
|
"copySuccess": "Copy Success",
|
||||||
|
"length": "length",
|
||||||
|
"words": "words"
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
@@ -38,7 +38,9 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"add": "追加",
|
"add": "追加",
|
||||||
"copySuccess": "コピーしました"
|
"copySuccess": "コピーしました",
|
||||||
|
"length": "長さ",
|
||||||
|
"words": "文字"
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|||||||
@@ -38,7 +38,9 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"add": "추가",
|
"add": "추가",
|
||||||
"copySuccess": "복사되었습니다"
|
"copySuccess": "복사되었습니다",
|
||||||
|
"length": "길이",
|
||||||
|
"words": "단어"
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|||||||
@@ -38,7 +38,9 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"add": "添加",
|
"add": "添加",
|
||||||
"copySuccess": "复制成功"
|
"copySuccess": "复制成功",
|
||||||
|
"length": "长度",
|
||||||
|
"words": "字符"
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|||||||
@@ -38,7 +38,9 @@
|
|||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
"add": "新增",
|
"add": "新增",
|
||||||
"copySuccess": "複製成功"
|
"copySuccess": "複製成功",
|
||||||
|
"length": "長度",
|
||||||
|
"words": "字符"
|
||||||
},
|
},
|
||||||
"page": {
|
"page": {
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
741
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user