diff --git a/.changeset/true-peas-attack.md b/.changeset/true-peas-attack.md new file mode 100644 index 0000000..9b8f508 --- /dev/null +++ b/.changeset/true-peas-attack.md @@ -0,0 +1,6 @@ +--- +'@lglab/react-qr-code': patch +'reactqrcode.com': patch +--- + +chore(deps) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f4311ca..761fa7c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,3 +10,27 @@ updates: target-branch: 'next' schedule: interval: 'daily' + groups: + react: + patterns: + - 'react*' + typescript: + patterns: + - '@types*' + - 'ts*' + - 'typescript*' + eslint: + patterns: + - 'eslint*' + - '@eslint*' + radix: + patterns: + - '@radix-ui*' + vite|vitest: + patterns: + - 'vite*' + - '@vite*' + tailwind: + patterns: + - 'tailwind*' + - '@tailwind*' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 70829d9..a3cb65d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,11 @@ on: concurrency: ${{ github.workflow }}-${{ github.ref }} +permissions: + id-token: write + contents: write + pull-requests: write + jobs: release: name: Release @@ -40,5 +45,3 @@ jobs: publish: pnpm ci:publish --no-git-checks env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/apps/docs/eslint.config.mjs b/apps/docs/eslint.config.mjs index 0238baa..57d84e3 100644 --- a/apps/docs/eslint.config.mjs +++ b/apps/docs/eslint.config.mjs @@ -1,23 +1,24 @@ -import { FlatCompat } from '@eslint/eslintrc' -import { dirname } from 'path' -import { fileURLToPath } from 'url' +import { defineConfig, globalIgnores } from 'eslint/config'; +import nextVitals from 'eslint-config-next/core-web-vitals'; +import nextTs from 'eslint-config-next/typescript'; -const __filename = fileURLToPath(import.meta.url) -const __dirname = dirname(__filename) - -const compat = new FlatCompat({ - baseDirectory: __dirname, -}) - -const eslintConfig = [ - ...compat.extends('next/core-web-vitals', 'next/typescript'), +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + '.next/**', + 'out/**', + 'build/**', + 'next-env.d.ts', + ]), { rules: { '@typescript-eslint/consistent-type-imports': 'error', 'no-console': 'error', }, - ignores: ['.next/*'], }, -] +]); -export default eslintConfig +export default eslintConfig; diff --git a/apps/docs/next-env.d.ts b/apps/docs/next-env.d.ts index 1b3be08..a3e4680 100644 --- a/apps/docs/next-env.d.ts +++ b/apps/docs/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +import './.next/dev/types/routes.d.ts' // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/docs/package.json b/apps/docs/package.json index a743179..898d3c0 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -10,67 +10,66 @@ "lint": "next lint" }, "dependencies": { - "@hookform/resolvers": "^4.1.3", + "@hookform/resolvers": "^5.2.2", "@lglab/react-qr-code": "workspace:*", - "@radix-ui/react-accordion": "^1.2.7", - "@radix-ui/react-alert-dialog": "^1.1.10", - "@radix-ui/react-aspect-ratio": "^1.1.4", - "@radix-ui/react-avatar": "^1.1.6", - "@radix-ui/react-checkbox": "^1.1.5", - "@radix-ui/react-collapsible": "^1.1.4", - "@radix-ui/react-context-menu": "^2.2.10", - "@radix-ui/react-dialog": "^1.1.10", - "@radix-ui/react-dropdown-menu": "^2.1.7", - "@radix-ui/react-hover-card": "^1.1.10", - "@radix-ui/react-label": "^2.1.3", - "@radix-ui/react-menubar": "^1.1.7", - "@radix-ui/react-navigation-menu": "^1.2.9", - "@radix-ui/react-popover": "^1.1.10", - "@radix-ui/react-progress": "^1.1.4", - "@radix-ui/react-radio-group": "^1.3.2", - "@radix-ui/react-scroll-area": "^1.2.5", - "@radix-ui/react-select": "^2.2.2", - "@radix-ui/react-separator": "^1.1.3", - "@radix-ui/react-slider": "^1.3.2", - "@radix-ui/react-slot": "^1.2.0", - "@radix-ui/react-switch": "^1.2.2", - "@radix-ui/react-tabs": "^1.1.7", - "@radix-ui/react-toast": "^1.2.7", - "@radix-ui/react-toggle": "^1.1.3", - "@radix-ui/react-toggle-group": "^1.1.6", - "@radix-ui/react-tooltip": "^1.2.0", - "@uiw/react-color": "^2.5.0", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-aspect-ratio": "^1.1.8", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-menubar": "^1.1.16", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "@uiw/react-color": "^2.9.2", "@vercel/analytics": "^1.5.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", + "eslint-config-next": "16.0.1", "input-otp": "^1.4.2", - "lucide-react": "^0.488.0", - "next": "15.4.7", + "lucide-react": "^0.553.0", + "next": "16.0.1", "next-themes": "^0.4.6", "prism-react-renderer": "^2.4.1", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-hook-form": "^7.55.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-hook-form": "^7.66.0", "react-icons": "^5.5.0", - "react-resizable-panels": "^2.1.7", - "recharts": "^2.15.3", - "sonner": "^2.0.3", - "tailwind-merge": "^3.2.0", + "react-resizable-panels": "^3.0.6", + "sonner": "^2.0.7", + "tailwind-merge": "^3.3.1", "tailwindcss-animate": "^1.0.7", - "vaul": "^1.1.2", - "zod": "^3.24.3" + "vaul": "^1.1.2" }, "devDependencies": { - "@tailwindcss/postcss": "^4.1.4", - "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^22.14.1", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", - "postcss": "^8.5.3", - "tailwindcss": "^4.1.4", - "typescript": "^5.8.3" + "@tailwindcss/postcss": "^4.1.17", + "@trivago/prettier-plugin-sort-imports": "^6.0.0", + "@types/node": "^24.10.0", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.17", + "typescript": "^5.9.3" } } diff --git a/apps/docs/src/components/ui/chart.tsx b/apps/docs/src/components/ui/chart.tsx deleted file mode 100644 index a1ecac9..0000000 --- a/apps/docs/src/components/ui/chart.tsx +++ /dev/null @@ -1,342 +0,0 @@ -'use client' - -import * as React from 'react' -import * as RechartsPrimitive from 'recharts' - -import { cn } from '@/lib/utils' - -// Format: { THEME_NAME: CSS_SELECTOR } -const THEMES = { light: '', dark: '.dark' } as const - -export type ChartConfig = { - [k in string]: { - label?: React.ReactNode - icon?: React.ComponentType - } & ( - | { color?: string; theme?: never } - | { color?: never; theme: Record } - ) -} - -type ChartContextProps = { - config: ChartConfig -} - -const ChartContext = React.createContext(null) - -function useChart() { - const context = React.useContext(ChartContext) - - if (!context) { - throw new Error('useChart must be used within a ') - } - - return context -} - -const ChartContainer = React.forwardRef< - HTMLDivElement, - React.ComponentProps<'div'> & { - config: ChartConfig - children: React.ComponentProps< - typeof RechartsPrimitive.ResponsiveContainer - >['children'] - } ->(({ id, className, children, config, ...props }, ref) => { - const uniqueId = React.useId() - const chartId = `chart-${id || uniqueId.replace(/:/g, '')}` - - return ( - -
- - - {children} - -
-
- ) -}) -ChartContainer.displayName = 'Chart' - -const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => { - const colorConfig = Object.entries(config).filter( - ([, config]) => config.theme || config.color, - ) - - if (!colorConfig.length) { - return null - } - - return ( -