{ "name": "frontend", "version": "1.0.0", "license": "MPL-2.0", "author": "Kaleidos INC", "private": true, "packageManager": "yarn@4.0.2", "browserslist": [ "defaults" ], "type": "module", "repository": { "type": "git", "url": "https://github.com/penpot/penpot" }, "resolutions": { "@vitejs/plugin-react": "^4.2.0" }, "scripts": { "fmt:clj:check": "cljfmt check --parallel=false src/ test/", "fmt:clj": "cljfmt fix --parallel=true src/ test/", "lint:scss": "yarn run prettier -c resources/styles -c src/**/*.scss", "lint:scss:fix": "yarn run prettier -c resources/styles -c src/**/*.scss -w", "lint:clj": "clj-kondo --parallel --lint src/", "test:compile": "clojure -M:dev:shadow-cljs compile test --config-merge '{:autorun false}'", "test:run": "node target/tests.cjs", "test:watch": "clojure -M:dev:shadow-cljs watch test", "test": "yarn run test:compile && yarn run test:run", "translations:validate": "node ./scripts/validate-translations.js", "translations:find-unused": "node ./scripts/find-unused-translations.js", "compile": "node ./scripts/compile.js", "watch": "node ./scripts/watch.js", "storybook:compile": "gulp template:storybook && clojure -M:dev:shadow-cljs compile storybook", "storybook:watch": "npm run storybook:compile && concurrently \"clojure -M:dev:shadow-cljs watch storybook\" \"storybook dev -p 6006\"", "storybook:build": "npm run storybook:compile && storybook build" }, "devDependencies": { "@storybook/addon-essentials": "^7.6.17", "@storybook/addon-interactions": "^7.6.17", "@storybook/addon-links": "^7.6.17", "@storybook/addon-onboarding": "^1.0.11", "@storybook/blocks": "^7.6.17", "@storybook/react": "^7.6.17", "@storybook/react-vite": "^7.6.17", "@storybook/testing-library": "^0.2.2", "@types/node": "^20.11.20", "animate.css": "^4.1.1", "autoprefixer": "^10.4.17", "concurrently": "^8.2.2", "draft-js": "git+https://github.com/penpot/draft-js.git", "fancy-log": "^2.0.0", "gettext-parser": "^8.0.0", "gulp": "4.0.2", "gulp-concat": "^2.6.1", "gulp-gzip": "^1.4.2", "gulp-mustache": "^5.0.0", "gulp-postcss": "^10.0.0", "gulp-rename": "^2.0.0", "gulp-sass": "^5.1.0", "gulp-sourcemaps": "^3.0.0", "gulp-svg-sprite": "^2.0.3", "jsdom": "^24.0.0", "map-stream": "0.0.7", "marked": "^12.0.0", "mkdirp": "^3.0.1", "mustache": "^4.2.0", "nodemon": "^3.1.0", "npm-run-all": "^4.1.5", "p-limit": "^5.0.0", "postcss": "^8.4.35", "postcss-clean": "^1.2.2", "prettier": "^3.2.5", "pretty-time": "^1.1.0", "prop-types": "^15.8.1", "rimraf": "^5.0.5", "sass": "^1.71.1", "sass-embedded": "^1.71.1", "shadow-cljs": "2.27.4", "storybook": "^7.6.17", "svg-sprite": "^2.0.2", "typescript": "^5.3.3", "vite": "^5.1.4", "vitest": "^1.3.1", "watcher": "^2.3.0", "workerpool": "^9.1.0" }, "dependencies": { "date-fns": "^3.3.1", "eventsource-parser": "^1.1.2", "highlight.js": "^11.9.0", "js-beautify": "^1.15.1", "jszip": "^3.10.1", "luxon": "^3.4.4", "mousetrap": "^1.6.5", "opentype.js": "^1.3.4", "postcss-modules": "^6.0.0", "randomcolor": "^0.6.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-virtualized": "^9.22.5", "rxjs": "8.0.0-alpha.14", "sax": "^1.3.0", "source-map-support": "^0.5.21", "tdigest": "^0.1.2", "ua-parser-js": "^1.0.37", "xregexp": "^5.1.1" } }