{
  "name": "app-ui",
  "version": "0.1.1",
  "private": true,
  "packageManager": "pnpm@10.17.1",
  "type": "module",
  "scripts": {
    "preinstall": "corepack enable",
    "style-dictionary": "cd ../../style-dictionary && pnpm build:style-dictionary",
    "icon-components": "cd ../../style-dictionary && pnpm build:icons",
    "tailwind-build": "tailwindcss -i ./src/tailwind-reload-workaround.css -o ./dist/tailwind-reload-workaround.css",
    "tailwind-watch": "tailwindcss -i ./src/tailwind-reload-workaround.css -o ./dist/tailwind-reload-workaround.css --watch",
    "prepare-dsp": "cd ../../dsp-engine && pnpm build pull $([ -n \"$VERCEL_GIT_COMMIT_SHA\" ] && echo \"--wait 900\") && cp artifacts/* ../ui/app-ui/dsp-artifacts",
    "upload-dsp-debug-artifact": "[ -f dsp-artifacts/dsp-engine.debug.wasm -a -n \"$SENTRY_AUTH_TOKEN\" ] && sentry-cli debug-files upload -o suno-ai -p app dsp-artifacts/dsp-engine.debug.wasm || true",
    "dev": "concurrently --kill-others \"next dev --turbo\" \"pnpm tailwind-watch\"",
    "start-node": "NODE_OPTIONS='--inspect' next start",
    "build": "NODE_ENV=production pnpm manifest:generate && NODE_OPTIONS=--max-old-space-size=6144 pnpm prepare-dsp && pnpm tailwind-build && NODE_ENV=production pnpm css:transform && NODE_OPTIONS=--max-old-space-size=8192 next build && pnpm build:validate && pnpm upload-dsp-debug-artifact",
    "start": "next start",
    "format:check": "prettier --check .",
    "format:fix": "prettier --write .",
    "format:fix-file": "prettier --write",
    "lint": "next lint",
    "lint:errors": "next lint --quiet",
    "lint-staged": "lint-staged",
    "check-public-assets": "bash scripts/check-public-assets.sh",
    "manifest:generate": "NODE_ENV=production node scripts/generate-asset-manifest.mjs",
    "manifest:check": "node scripts/generate-asset-manifest.mjs --check",
    "manifest:debug": "node scripts/debug-manifest.mjs",
    "css:transform": "NODE_ENV=production node scripts/transform-css-assets.mjs",
    "build:validate": "NODE_ENV=production node scripts/validate-build.mjs",
    "test:ci": "pnpm tailwind-build && vitest run --coverage",
    "test": "vitest run",
    "test:watch": "vitest",
    "test:update-snapshots": "vitest run --update",
    "test:update-coverage": "vitest run --coverage --coverage.thresholds.autoUpdate",
    "test:coverage": "vitest run --coverage --coverage.reporter=text --coverage.reporter=html && (open coverage/index.html 2>/dev/null || echo 'Coverage report generated at coverage/index.html')",
    "gen-types": "pnpm openapi-typescript ../../studio_api/schema.json -o ./src/lib/gen.ts",
    "prepare": "cd ../.. && lefthook install",
    "storybook": "concurrently --kill-others \"storybook dev -p 6006\" \"pnpm tailwind-watch\"",
    "build-storybook": "pnpm tailwind-build && storybook build",
    "serve-storybook": "serve storybook-static",
    "test:e2e": "npx playwright test",
    "test:e2e-codegen": "npx ts-node ./e2e-codegen.ts",
    "test:listening": "npx playwright test --config=playwright-listening-tests.config.ts",
    "generate:proto": "protoc --plugin=protoc-gen-ts_proto=$(pnpm bin)/protoc-gen-ts_proto --ts_proto_opt=outputServices=grpc-js,outputClientImpl=grpc-web --ts_proto_out=./src/proto_gen --proto_path=../../proto ../../proto/*.proto",
    "analyze": "ANALYZE=true next build"
  },
  "dependencies": {
    "@ably/chat": "^0.14.1",
    "@bufbuild/protobuf": "^2.9.0",
    "@chakra-ui/react": "^2.8.2",
    "@chakra-ui/system": "^2.6.2",
    "@chakra-ui/toast": "^7.0.2",
    "@clerk/nextjs": "^6.12.6",
    "@clerk/themes": "^2.2.22",
    "@clerk/types": "^4.89.0",
    "@clerk/upgrade": "^1.2.4",
    "@ctrl/tinycolor": "^4.1.0",
    "@dagrejs/dagre": "^1.1.4",
    "@datadog/browser-rum": "^6.3.0",
    "@datocms/cma-client-browser": "^3.1.2",
    "@dnd-kit/core": "^6.1.0",
    "@dnd-kit/modifiers": "^7.0.0",
    "@dnd-kit/sortable": "^10.0.0",
    "@dnd-kit/utilities": "^3.2.2",
    "@emotion/react": "^11.11.1",
    "@emotion/styled": "^11.11.0",
    "@grpc/grpc-js": "^1.12.2",
    "@grpc/proto-loader": "^0.7.13",
    "@hcaptcha/react-hcaptcha": "^1.10.1",
    "@honeypot-run/core": "^0.2.71",
    "@lexical/react": "^0.23.1",
    "@lexical/selection": "^0.23.1",
    "@next/bundle-analyzer": "15.1.7",
    "@radix-ui/react-accordion": "^1.2.11",
    "@radix-ui/react-alert-dialog": "^1.1.5",
    "@radix-ui/react-dialog": "^1.1.13",
    "@radix-ui/react-dropdown-menu": "^2.0.6",
    "@radix-ui/react-popover": "^1.1.2",
    "@radix-ui/react-radio-group": "^1.3.6",
    "@radix-ui/react-tabs": "^1.1.1",
    "@react-hookz/web": "^25.2.0",
    "@segment/analytics-next": "^1.77.0",
    "@sentry/core": "^10.16.0",
    "@sentry/nextjs": "^10.16.0",
    "@sentry/vite-plugin": "^4.3.0",
    "@sentry/wasm": "^10.16.0",
    "@splinetool/react-spline": "^4.0.0",
    "@splinetool/runtime": "^1.9.28",
    "@statsig/react-bindings": "^3.25.5",
    "@stripe/stripe-js": "^3.0.10",
    "@tailwindcss/cli": "^4.1.11",
    "@tailwindcss/postcss": "^4.1.11",
    "@suno/studiokit": "workspace:*",
    "@tanstack/query-async-storage-persister": "^5.83.0",
    "@tanstack/query-sync-storage-persister": "^5.66.0",
    "@tanstack/react-query": "^5.13.4",
    "@tanstack/react-query-devtools": "^5.64.2",
    "@tanstack/react-query-persist-client": "^5.66.0",
    "@tanstack/react-virtual": "^3.11.0",
    "@tonejs/midi": "^2.0.28",
    "@types/diff": "^7.0.0",
    "@types/js-cookie": "^3.0.6",
    "@types/jsonwebtoken": "^9.0.10",
    "@types/localforage": "^0.0.34",
    "@types/md5": "^2.3.5",
    "@types/react-autosuggest": "^10.1.11",
    "@types/react-avatar-editor": "^13.0.2",
    "@types/react-window": "^1.8.8",
    "@types/three": "^0.164.0",
    "@uiw/react-split": "^5.9.3",
    "@uppy/audio": "^1.1.9",
    "@uppy/aws-s3": "^3.6.2",
    "@uppy/core": "^3.11.3",
    "@uppy/dashboard": "^3.8.3",
    "@uppy/drag-drop": "^3.1.0",
    "@uppy/file-input": "^3.1.2",
    "@uppy/progress-bar": "^3.1.1",
    "@uppy/react": "^3.3.1",
    "@uppy/xhr-upload": "^3.6.6",
    "@vercel/functions": "^2.0.0",
    "@xyflow/react": "^12.4.1",
    "@zip.js/zip.js": "^2.7.57",
    "ably": "^2.5.0",
    "apache-arrow": "^21.0.0",
    "autoprefixer": "^10.4.21",
    "branch-sdk": "^2.86.0",
    "browser-id3-writer": "^6.2.0",
    "canvas-confetti": "^1.9.3",
    "clsx": "^2.1.1",
    "color-thief-react": "^2.1.0",
    "copy-to-clipboard": "^3.3.3",
    "d3": "^7.9.0",
    "d3-array": "^3.2.4",
    "d3-ease": "^3.0.1",
    "d3-zoom": "^3.0.0",
    "dataloader": "^2.2.3",
    "date-fns": "^4.1.0",
    "diff": "^7.0.0",
    "embla-carousel": "^8.6.0",
    "embla-carousel-autoplay": "^8.4.0",
    "embla-carousel-react": "^8.3.1",
    "emoji-picker-react": "^4.12.2",
    "framer-motion": "^11.0.27",
    "get-jwks": "^11.0.1",
    "glob": "^11.0.3",
    "glslify-loader": "^2.0.0",
    "graphql": "^16.11.0",
    "graphql-request": "^6.1.0",
    "hls.js": "^1.6.7",
    "hsluv": "^1.0.1",
    "i18next": "^24.2.2",
    "i18next-browser-languagedetector": "^8.0.0",
    "i18next-chained-backend": "^4.6.2",
    "i18next-http-backend": "^3.0.2",
    "i18next-localstorage-backend": "^4.2.0",
    "i18next-resources-to-backend": "^1.2.1",
    "immer": "^10.1.1",
    "import-in-the-middle": "^1.14.4",
    "javascript-time-ago": "^2.5.10",
    "js-cookie": "^3.0.5",
    "jsonrepair": "^3.9.0",
    "jsonwebtoken": "^9.0.2",
    "keyv": "^4.5.4",
    "lazysizes": "^5.3.2",
    "lexical": "^0.23.1",
    "localforage": "^1.10.0",
    "lodash-es": "^4.17.21",
    "lodash-redux-immutability": "^0.0.3",
    "marked": "^12.0.0",
    "md5": "^2.3.0",
    "mobx": "^6.12.0",
    "mobx-react-lite": "^4.0.5",
    "next": "15.2.4",
    "next-i18next": "^15.3.1",
    "node-polyfill-webpack-plugin": "^4.0.0",
    "openapi-fetch": "^0.15.0",
    "openapi-typescript-helpers": "^0.0.15",
    "parse-css-color": "^0.2.1",
    "partial-json": "^0.1.7",
    "postcss": "^8.4.38",
    "postcss-value-parser": "^4.2.0",
    "rbush-3d": "^0.0.4",
    "react": "19.0.0",
    "react-aria": "^3.32.1",
    "react-aria-components": "^1.6.0",
    "react-autosuggest": "^10.1.0",
    "react-avatar-editor": "^13.0.2",
    "react-cookie": "^8.0.1",
    "react-dom": "19.0.0",
    "react-dropzone": "^14.2.3",
    "react-error-boundary": "^6.0.0",
    "react-floater": "^0.9.3",
    "react-hotkeys-hook": "^4.4.1",
    "react-i18next": "^15.0.2",
    "react-icons": "^4.12.0",
    "react-imask": "^7.6.1",
    "react-intersection-observer": "^9.5.3",
    "react-joyride": "^2.8.2",
    "react-markdown": "^10.1.0",
    "react-player": "^2.16.0",
    "react-stately": "^3.30.1",
    "react-textarea-autosize": "^8.5.7",
    "react-tsparticles": "^2.12.2",
    "react-virtualized-auto-sizer": "^1.0.24",
    "react-window": "^1.8.10",
    "regexify-string": "^1.0.19",
    "regl": "^2.1.1",
    "rehype-raw": "^7.0.0",
    "require-in-the-middle": "^7.5.2",
    "reselect": "^5.1.1",
    "sass": "^1.70.0",
    "sharp": "^0.34.4",
    "statsig-react": "^1.38.1",
    "storage-available": "^1.1.0",
    "string-ts": "^2.2.0",
    "tailwind-merge": "^3.3.1",
    "tailwindcss": "^4.1.11",
    "tailwindcss-animated": "^2.0.0",
    "tailwindcss-react-aria-components": "^2.0.0",
    "three": "^0.164.1",
    "ts-proto": "^2.2.4",
    "ts-protoc-gen": "^0.15.0",
    "tsparticles": "^3.5.0",
    "type-fest": "^4.35.0",
    "usehooks-ts": "^3.1.1",
    "uuid": "^11.0.3",
    "web-worker": "^1.3.0",
    "webpack-node-externals": "^3.0.0",
    "wheel-gestures": "^2.2.48",
    "zustand": "^5.0.8"
  },
  "devDependencies": {
    "@clerk/testing": "^1.11.0",
    "@hcaptcha/types": "^1.0.3",
    "@next/eslint-plugin-next": "^15.5.4",
    "@playwright/test": "^1.43.1",
    "@sentry/cli": "^2.55.0",
    "@sentry/wizard": "^3.19.0",
    "@storybook/addon-docs": "^9.1.8",
    "@storybook/addon-links": "^9.1.8",
    "@storybook/addon-themes": "^9.1.8",
    "@storybook/nextjs": "^9.1.8",
    "@storybook/react": "^9.1.8",
    "@swc/plugin-emotion": "^11.0.0",
    "@testing-library/react": "^16.2.0",
    "@trivago/prettier-plugin-sort-imports": "^4.3.0",
    "@types/branch-sdk": "^2.53.7",
    "@types/canvas-confetti": "^1.6.4",
    "@types/d3": "^7.4.3",
    "@types/d3-ease": "^3.0.2",
    "@types/d3-scale": "^4.0.9",
    "@types/d3-zoom": "^3.0.8",
    "@types/eslint-plugin-jsx-a11y": "^6.10.0",
    "@types/estree": "^1.0.8",
    "@types/lodash-es": "^4.17.12",
    "@types/node": "^22.13.1",
    "@types/react": "19.0.10",
    "@types/react-dom": "19.0.4",
    "@typescript-eslint/eslint-plugin": "^8.0.0",
    "@typescript-eslint/parser": "^8.0.0",
    "@vitejs/plugin-react": "^5.0.4",
    "@vitest/coverage-v8": "^3.2.4",
    "concurrently": "^9.1.0",
    "dotenv": "^17.2.2",
    "eslint": "^9.0.0",
    "eslint-config-next": "^15.5.2",
    "eslint-config-prettier": "^10.1.8",
    "eslint-plugin-jsx-a11y": "^6.10.2",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-storybook": "^9.1.3",
    "globals": "^15.15.0",
    "jsdom": "^23.0.1",
    "lefthook": "^2.0.0",
    "lint-staged": "^15.2.0",
    "nock": "^14.0.10",
    "openapi-typescript": "^6.7.3",
    "postcss-import": "^16.1.0",
    "prettier": "^3.2.4",
    "prettier-plugin-tailwindcss": "^0.6.14",
    "raw-loader": "^4.0.2",
    "remark-gfm": "^4.0.1",
    "storybook": "^9.1.8",
    "typescript": "^5",
    "unzipper": "^0.12.3",
    "vite-tsconfig-paths": "^5.1.4",
    "vitest": "^3.2.4",
    "webpack": "^5.101.3"
  }
}
