Merge branch 'v3' into feat/init-blog

This commit is contained in:
Hugo Richard
2025-06-23 12:27:47 +02:00
committed by GitHub
11 changed files with 605 additions and 602 deletions

View File

@@ -1,15 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { useClipboard } from '@vueuse/core'
const value = ref('npx nuxt module add ui') const value = ref('npx nuxt module add ui')
const copied = ref(false)
function copy() { const { copy, copied } = useClipboard()
navigator.clipboard.writeText(value.value)
copied.value = true
setTimeout(() => {
copied.value = false
}, 2000)
}
</script> </script>
<template> <template>
@@ -25,7 +19,7 @@ function copy() {
size="sm" size="sm"
:icon="copied ? 'i-lucide-copy-check' : 'i-lucide-copy'" :icon="copied ? 'i-lucide-copy-check' : 'i-lucide-copy'"
aria-label="Copy to clipboard" aria-label="Copy to clipboard"
@click="copy" @click="copy(value)"
/> />
</UTooltip> </UTooltip>
</template> </template>

View File

@@ -2,6 +2,7 @@
import { h, resolveComponent } from 'vue' import { h, resolveComponent } from 'vue'
import { upperFirst } from 'scule' import { upperFirst } from 'scule'
import type { TableColumn } from '@nuxt/ui' import type { TableColumn } from '@nuxt/ui'
import { useClipboard } from '@vueuse/core'
const UButton = resolveComponent('UButton') const UButton = resolveComponent('UButton')
const UCheckbox = resolveComponent('UCheckbox') const UCheckbox = resolveComponent('UCheckbox')
@@ -9,6 +10,7 @@ const UBadge = resolveComponent('UBadge')
const UDropdownMenu = resolveComponent('UDropdownMenu') const UDropdownMenu = resolveComponent('UDropdownMenu')
const toast = useToast() const toast = useToast()
const { copy } = useClipboard()
type Payment = { type Payment = {
id: string id: string
@@ -220,7 +222,7 @@ const columns: TableColumn<Payment>[] = [{
}, { }, {
label: 'Copy payment ID', label: 'Copy payment ID',
onSelect() { onSelect() {
navigator.clipboard.writeText(row.original.id) copy(row.original.id)
toast.add({ toast.add({
title: 'Payment ID copied to clipboard!', title: 'Payment ID copied to clipboard!',

View File

@@ -2,12 +2,14 @@
import { h, resolveComponent } from 'vue' import { h, resolveComponent } from 'vue'
import type { TableColumn } from '@nuxt/ui' import type { TableColumn } from '@nuxt/ui'
import type { Row } from '@tanstack/vue-table' import type { Row } from '@tanstack/vue-table'
import { useClipboard } from '@vueuse/core'
const UButton = resolveComponent('UButton') const UButton = resolveComponent('UButton')
const UBadge = resolveComponent('UBadge') const UBadge = resolveComponent('UBadge')
const UDropdownMenu = resolveComponent('UDropdownMenu') const UDropdownMenu = resolveComponent('UDropdownMenu')
const toast = useToast() const toast = useToast()
const { copy } = useClipboard()
type Payment = { type Payment = {
id: string id: string
@@ -119,7 +121,7 @@ function getRowItems(row: Row<Payment>) {
}, { }, {
label: 'Copy payment ID', label: 'Copy payment ID',
onSelect() { onSelect() {
navigator.clipboard.writeText(row.original.id) copy(row.original.id)
toast.add({ toast.add({
title: 'Payment ID copied to clipboard!', title: 'Payment ID copied to clipboard!',

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import type { TableColumn, DropdownMenuItem } from '@nuxt/ui' import type { TableColumn, DropdownMenuItem } from '@nuxt/ui'
import { useClipboard } from '@vueuse/core'
interface User { interface User {
id: number id: number
@@ -10,6 +11,7 @@ interface User {
} }
const toast = useToast() const toast = useToast()
const { copy } = useClipboard()
const data = ref<User[]>([{ const data = ref<User[]>([{
id: 1, id: 1,
@@ -71,7 +73,8 @@ function getDropdownActions(user: User): DropdownMenuItem[][] {
label: 'Copy user Id', label: 'Copy user Id',
icon: 'i-lucide-copy', icon: 'i-lucide-copy',
onSelect: () => { onSelect: () => {
navigator.clipboard.writeText(user.id.toString()) copy(user.id.toString())
toast.add({ toast.add({
title: 'User ID copied to clipboard!', title: 'User ID copied to clipboard!',
color: 'success', color: 'success',

View File

@@ -11,10 +11,10 @@
"dependencies": { "dependencies": {
"@ai-sdk/vue": "^1.2.12", "@ai-sdk/vue": "^1.2.12",
"@iconify-json/logos": "^1.2.4", "@iconify-json/logos": "^1.2.4",
"@iconify-json/lucide": "^1.2.49", "@iconify-json/lucide": "^1.2.51",
"@iconify-json/simple-icons": "^1.2.38", "@iconify-json/simple-icons": "^1.2.39",
"@iconify-json/vscode-icons": "^1.2.23", "@iconify-json/vscode-icons": "^1.2.23",
"@nuxt/content": "^3.6.0", "@nuxt/content": "^3.6.1",
"@nuxt/image": "^1.10.0", "@nuxt/image": "^1.10.0",
"@nuxt/ui": "workspace:*", "@nuxt/ui": "workspace:*",
"@nuxt/ui-pro": "https://pkg.pr.new/@nuxt/ui-pro@beebbd4", "@nuxt/ui-pro": "https://pkg.pr.new/@nuxt/ui-pro@beebbd4",
@@ -22,29 +22,29 @@
"@nuxtjs/plausible": "^1.2.0", "@nuxtjs/plausible": "^1.2.0",
"@octokit/rest": "^22.0.0", "@octokit/rest": "^22.0.0",
"@rollup/plugin-yaml": "^4.1.2", "@rollup/plugin-yaml": "^4.1.2",
"@vueuse/integrations": "^13.3.0", "@vueuse/integrations": "^13.4.0",
"@vueuse/nuxt": "^13.3.0", "@vueuse/nuxt": "^13.4.0",
"ai": "^4.3.16", "ai": "^4.3.16",
"better-sqlite3": "^11.10.0", "better-sqlite3": "^11.10.0",
"capture-website": "^4.2.0", "capture-website": "^4.2.0",
"joi": "^17.13.3", "joi": "^17.13.3",
"maska": "^3.1.1", "maska": "^3.1.1",
"motion-v": "^1.2.1", "motion-v": "^1.3.0",
"nuxt": "^3.17.5", "nuxt": "^3.17.5",
"nuxt-component-meta": "^0.11.0", "nuxt-component-meta": "^0.11.0",
"nuxt-llms": "^0.1.3", "nuxt-llms": "^0.1.3",
"nuxt-og-image": "^5.1.6", "nuxt-og-image": "^5.1.7",
"prettier": "^3.5.3", "prettier": "^3.6.0",
"shiki-transformer-color-highlight": "^1.0.0", "shiki-transformer-color-highlight": "^1.0.0",
"sortablejs": "^1.15.6", "sortablejs": "^1.15.6",
"superstruct": "^2.0.2", "superstruct": "^2.0.2",
"ufo": "^1.6.1", "ufo": "^1.6.1",
"valibot": "^1.1.0", "valibot": "^1.1.0",
"workers-ai-provider": "^0.6.1", "workers-ai-provider": "^0.7.0",
"yup": "^1.6.1", "yup": "^1.6.1",
"zod": "^3.25.64" "zod": "^3.25.67"
}, },
"devDependencies": { "devDependencies": {
"wrangler": "^4.20.0" "wrangler": "^4.20.5"
} }
} }

View File

@@ -2,7 +2,7 @@
"name": "@nuxt/ui", "name": "@nuxt/ui",
"description": "A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.", "description": "A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.",
"version": "3.1.3", "version": "3.1.3",
"packageManager": "pnpm@10.12.1", "packageManager": "pnpm@10.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/ui.git" "url": "git+https://github.com/nuxt/ui.git"
@@ -115,7 +115,7 @@
"@internationalized/date": "^3.8.2", "@internationalized/date": "^3.8.2",
"@internationalized/number": "^3.6.3", "@internationalized/number": "^3.6.3",
"@nuxt/fonts": "^0.11.4", "@nuxt/fonts": "^0.11.4",
"@nuxt/icon": "^1.13.0", "@nuxt/icon": "^1.14.0",
"@nuxt/kit": "^3.17.5", "@nuxt/kit": "^3.17.5",
"@nuxt/schema": "^3.17.5", "@nuxt/schema": "^3.17.5",
"@nuxtjs/color-mode": "^3.5.2", "@nuxtjs/color-mode": "^3.5.2",
@@ -124,8 +124,8 @@
"@tailwindcss/vite": "^4.1.10", "@tailwindcss/vite": "^4.1.10",
"@tanstack/vue-table": "^8.21.3", "@tanstack/vue-table": "^8.21.3",
"@unhead/vue": "^2.0.10", "@unhead/vue": "^2.0.10",
"@vueuse/core": "^13.3.0", "@vueuse/core": "^13.4.0",
"@vueuse/integrations": "^13.3.0", "@vueuse/integrations": "^13.4.0",
"colortranslator": "^5.0.0", "colortranslator": "^5.0.0",
"consola": "^3.4.2", "consola": "^3.4.2",
"defu": "^6.1.4", "defu": "^6.1.4",
@@ -165,7 +165,7 @@
"happy-dom": "^18.0.1", "happy-dom": "^18.0.1",
"nuxt": "^3.17.5", "nuxt": "^3.17.5",
"release-it": "^19.0.3", "release-it": "^19.0.3",
"vitest": "^3.2.3", "vitest": "^3.2.4",
"vitest-environment-nuxt": "^1.0.1", "vitest-environment-nuxt": "^1.0.1",
"vue-tsc": "^2.2.10" "vue-tsc": "^2.2.10"
}, },

View File

@@ -11,9 +11,9 @@
}, },
"dependencies": { "dependencies": {
"@nuxt/ui": "workspace:*", "@nuxt/ui": "workspace:*",
"vue": "^3.5.16", "vue": "^3.5.17",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"zod": "^3.25.64" "zod": "^3.25.67"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^5.2.4", "@vitejs/plugin-vue": "^5.2.4",

View File

@@ -3,6 +3,7 @@ import { h, resolveComponent } from 'vue'
import { upperFirst } from 'scule' import { upperFirst } from 'scule'
import type { TableColumn, TableRow } from '@nuxt/ui' import type { TableColumn, TableRow } from '@nuxt/ui'
import { getPaginationRowModel } from '@tanstack/vue-table' import { getPaginationRowModel } from '@tanstack/vue-table'
import { useClipboard } from '@vueuse/core'
const UButton = resolveComponent('UButton') const UButton = resolveComponent('UButton')
const UCheckbox = resolveComponent('UCheckbox') const UCheckbox = resolveComponent('UCheckbox')
@@ -10,6 +11,7 @@ const UBadge = resolveComponent('UBadge')
const UDropdownMenu = resolveComponent('UDropdownMenu') const UDropdownMenu = resolveComponent('UDropdownMenu')
const toast = useToast() const toast = useToast()
const { copy } = useClipboard()
type Payment = { type Payment = {
id: string id: string
@@ -231,7 +233,7 @@ const columns: TableColumn<Payment>[] = [{
}, { }, {
label: 'Copy payment ID', label: 'Copy payment ID',
onSelect() { onSelect() {
navigator.clipboard.writeText(row.original.id) copy(row.original.id)
toast.add({ toast.add({
title: 'Payment ID copied to clipboard!', title: 'Payment ID copied to clipboard!',

View File

@@ -9,13 +9,13 @@
"typecheck": "nuxt typecheck" "typecheck": "nuxt typecheck"
}, },
"dependencies": { "dependencies": {
"@iconify-json/lucide": "^1.2.49", "@iconify-json/lucide": "^1.2.51",
"@iconify-json/simple-icons": "^1.2.38", "@iconify-json/simple-icons": "^1.2.39",
"@internationalized/date": "^3.8.2", "@internationalized/date": "^3.8.2",
"@nuxt/ui": "workspace:*", "@nuxt/ui": "workspace:*",
"@nuxthub/core": "^0.9.0", "@nuxthub/core": "^0.9.0",
"nuxt": "^3.17.5", "nuxt": "^3.17.5",
"zod": "^3.25.64" "zod": "^3.25.67"
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5.8.3", "typescript": "^5.8.3",

1132
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
export default { export default {
slots: { slots: {
viewport: 'fixed flex flex-col w-[calc(100%-2rem)] sm:w-96 z-[100] data-[expanded=true]:h-(--height) focus:outline-none', viewport: 'fixed flex flex-col w-[calc(100%-2rem)] sm:w-96 z-[100] data-[expanded=true]:h-(--height) focus:outline-none',
base: 'pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:invisible data-[state=closed]:animate-[toast-closed_200ms_ease-in-out] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_ease-in-out] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out' base: 'pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:opacity-0 data-[front=false]:*:transition-opacity data-[front=false]:*:duration-100 data-[state=closed]:animate-[toast-closed_200ms_ease-in-out] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_ease-in-out] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out'
}, },
variants: { variants: {
position: { position: {