{ "name": "frontend", "private": true, "type": "module", "scripts": { "watch": "vite", "build": "vite build", "storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"", "build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js", "build-storybook": "pnpm build-storybook-pre && storybook build --webpack-stats-json storybook-static", "chromatic": "chromatic", "test": "vitest --run --globals", "test-and-coverage": "vitest --run --coverage --globals", "typecheck": "vue-tsc --noEmit", "eslint": "eslint --quiet \"src/**/*.{ts,vue}\"", "lint": "pnpm typecheck && pnpm eslint" }, "dependencies": { "@analytics/google-analytics": "1.1.0", "@discordapp/twemoji": "catalog:", "@github/webauthn-json": "2.1.1", "@mcaptcha/vanilla-glue": "0.1.0-alpha-3", "@misskey-dev/browser-image-resizer": "2024.1.0", "@rollup/plugin-json": "catalog:", "@rollup/plugin-replace": "catalog:", "@rollup/pluginutils": "catalog:", "@sentry/vue": "catalog:", "@syuilo/aiscript": "0.19.0", "@tabler/icons-webfont": "catalog:", "@twemoji/parser": "catalog:", "@vitejs/plugin-vue": "catalog:", "@vue/compiler-sfc": "catalog:", "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.15", "analytics": "0.8.16", "astring": "catalog:", "broadcast-channel": "7.1.0", "buraha": "catalog:", "canvas-confetti": "1.9.3", "chart.js": "4.4.9", "chartjs-adapter-date-fns": "3.0.0", "chartjs-chart-matrix": "2.1.1", "chartjs-plugin-gradient": "0.6.1", "chartjs-plugin-zoom": "2.2.0", "chromatic": "11.28.2", "compare-versions": "6.1.1", "cropperjs": "2.0.0", "date-fns": "catalog:date-fns4", "estree-walker": "catalog:", "eventemitter3": "catalog:", "frontend-shared": "workspace:*", "idb-keyval": "catalog:", "insert-text-at-cursor": "0.3.0", "is-file-animated": "1.0.2", "json5": "catalog:", "magic-string": "0.30.17", "matter-js": "catalog:", "mfm-js": "catalog:", "misskey-bubble-game": "workspace:*", "misskey-js": "workspace:*", "misskey-reversi": "workspace:*", "photoswipe": "5.4.4", "punycode.js": "catalog:", "rollup": "catalog:", "sanitize-html": "catalog:", "sass": "catalog:", "shiki": "catalog:", "strict-event-emitter-types": "catalog:", "textarea-caret": "3.1.0", "three": "0.176.0", "throttle-debounce": "5.0.2", "tinycolor2": "catalog:", "tsc-alias": "catalog:", "tsconfig-paths": "catalog:", "typescript": "catalog:", "uuid": "catalog:", "v-code-diff": "1.13.1", "vite": "catalog:", "vue": "catalog:", "vuedraggable": "next", "wanakana": "5.3.1" }, "devDependencies": { "@misskey-dev/summaly": "catalog:", "@storybook/addon-actions": "8.6.12", "@storybook/addon-essentials": "8.6.12", "@storybook/addon-interactions": "8.6.12", "@storybook/addon-links": "8.6.12", "@storybook/addon-mdx-gfm": "8.6.12", "@storybook/addon-storysource": "8.6.12", "@storybook/blocks": "8.6.12", "@storybook/components": "8.6.12", "@storybook/core-events": "8.6.12", "@storybook/manager-api": "8.6.12", "@storybook/preview-api": "8.6.12", "@storybook/react": "8.6.12", "@storybook/react-vite": "8.6.12", "@storybook/test": "8.6.12", "@storybook/theming": "8.6.12", "@storybook/types": "8.6.12", "@storybook/vue3": "8.6.12", "@storybook/vue3-vite": "8.6.12", "@testing-library/vue": "catalog:", "@types/canvas-confetti": "1.9.0", "@types/estree": "catalog:", "@types/matter-js": "catalog:", "@types/micromatch": "catalog:", "@types/node": "catalog:", "@types/punycode.js": "catalog:", "@types/sanitize-html": "catalog:", "@types/seedrandom": "catalog:", "@types/throttle-debounce": "5.0.2", "@types/tinycolor2": "catalog:", "@types/ws": "catalog:", "@typescript-eslint/eslint-plugin": "catalog:", "@typescript-eslint/parser": "catalog:", "@vitest/coverage-v8": "catalog:", "@vue/compiler-core": "3.5.13", "@vue/runtime-core": "catalog:", "acorn": "catalog:", "cross-env": "catalog:", "cypress": "14.3.2", "eslint-plugin-import": "catalog:", "eslint-plugin-vue": "catalog:", "fast-glob": "catalog:", "happy-dom": "catalog:happy-dom17", "intersection-observer": "catalog:", "micromatch": "catalog:", "minimatch": "10.0.1", "msw": "catalog:", "msw-storybook-addon": "2.0.4", "nodemon": "catalog:", "prettier": "catalog:", "react": "19.1.0", "react-dom": "19.1.0", "seedrandom": "catalog:", "start-server-and-test": "catalog:", "storybook": "8.6.12", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "vite-plugin-turbosnap": "catalog:", "vitest": "3.1.2", "vitest-fetch-mock": "0.4.5", "vue-component-type-helpers": "catalog:", "vue-eslint-parser": "catalog:", "vue-tsc": "catalog:" } }