{ "name": "frontend", "version": "1.0.0", "license": "MPL-2.0", "author": "Kaleidos INC", "private": true, "packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c", "browserslist": [ "defaults" ], "type": "module", "repository": { "type": "git", "url": "https://github.com/penpot/penpot" }, "resolutions": { "@zip.js/zip.js@npm:^2.7.44": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch", "@vitejs/plugin-react": "^4.2.0" }, "scripts": { "build:app:assets": "node ./scripts/build-app-assets.js", "build:storybook": "yarn run build:storybook:assets && yarn run build:storybook:cljs && storybook build", "build:storybook:assets": "node ./scripts/build-storybook-assets.js", "build:wasm": "../render-wasm/build", "build:storybook:cljs": "clojure -M:dev:shadow-cljs compile storybook", "build:app:libs": "node ./scripts/build-libs.js", "build:app:main": "clojure -M:dev:shadow-cljs release main worker", "build:app": "yarn run clear:shadow-cache && yarn run build:app:main && yarn run build:app:libs", "e2e:server": "node ./scripts/e2e-server.js", "fmt:clj": "cljfmt fix --parallel=true src/ test/", "fmt:clj:check": "cljfmt check --parallel=false src/ test/", "fmt:js": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -w", "fmt:js:check": "yarn run prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js", "lint:clj": "clj-kondo --parallel --lint src/", "lint:scss": "yarn run prettier -c resources/styles -c src/**/*.scss", "lint:scss:fix": "yarn run prettier -c resources/styles -c src/**/*.scss -w", "build:test": "clojure -M:dev:shadow-cljs compile test", "test": "yarn run build:test && node target/tests/test.js", "test:storybook": "test-storybook", "watch:test": "mkdir -p target/tests && concurrently \"clojure -M:dev:shadow-cljs watch test\" \"nodemon -C -d 2 -w target/tests --exec 'node target/tests/test.js'\"", "test:e2e": "playwright test --project default", "translations": "node ./scripts/translations.js", "watch:app:assets": "node ./scripts/watch.js", "watch:app:libs": "node ./scripts/build-libs.js --watch", "watch:app:main": "clojure -M:dev:shadow-cljs watch main worker storybook", "clear:shadow-cache": "rm -rf .shadow-cljs", "watch:app": "yarn run clear:shadow-cache && concurrently \"yarn run watch:app:main\" \"yarn run watch:app:libs\"", "watch": "yarn run watch:app:assets", "watch:storybook": "concurrently \"storybook dev -p 6006 --no-open\" \"yarn run watch:storybook:assets\"", "watch:storybook:assets": "node ./scripts/watch-storybook.js" }, "devDependencies": { "@playwright/test": "1.52.0", "@storybook/addon-essentials": "^8.6.14", "@storybook/addon-interactions": "^8.6.14", "@storybook/addon-themes": "^8.6.14", "@storybook/blocks": "^8.6.14", "@storybook/react": "^8.6.14", "@storybook/react-vite": "^8.6.14", "@storybook/test": "^8.6.14", "@storybook/test-runner": "^0.22.0", "@types/node": "^22.15.21", "autoprefixer": "^10.4.21", "concurrently": "^9.1.2", "esbuild": "^0.25.5", "express": "^5.1.0", "fancy-log": "^2.0.0", "getopts": "^2.3.0", "gettext-parser": "^8.0.0", "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-sourcemaps": "^3.0.0", "gulp-svg-sprite": "^2.0.3", "jsdom": "^26.1.0", "map-stream": "0.0.7", "marked": "^15.0.12", "mkdirp": "^3.0.1", "mustache": "^4.2.0", "nodemon": "^3.1.10", "npm-run-all": "^4.1.5", "p-limit": "^6.2.0", "postcss": "^8.5.4", "postcss-clean": "^1.2.2", "prettier": "3.5.3", "pretty-time": "^1.1.0", "prop-types": "^15.8.1", "rimraf": "^6.0.1", "sass": "^1.89.0", "sass-embedded": "^1.89.0", "storybook": "^8.6.14", "svg-sprite": "^2.0.4", "typescript": "^5.8.3", "vite": "^6.3.5", "vitest": "^3.2.0", "wasm-pack": "^0.13.1", "watcher": "^2.3.1", "workerpool": "^9.3.2" }, "dependencies": { "@penpot/draft-js": "portal:./vendor/draft-js", "@penpot/hljs": "portal:./vendor/hljs", "@penpot/mousetrap": "portal:./vendor/mousetrap", "@penpot/plugins-runtime": "1.3.2", "@penpot/svgo": "penpot/svgo#v3.1", "@penpot/text-editor": "portal:./text-editor", "@tokens-studio/sd-transforms": "1.2.11", "@zip.js/zip.js": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch", "compression": "^1.8.0", "date-fns": "^4.1.0", "eventsource-parser": "^3.0.2", "js-beautify": "^1.15.4", "lodash": "^4.17.21", "lodash.debounce": "^4.0.8", "opentype.js": "^1.3.4", "postcss-modules": "^6.0.1", "randomcolor": "^0.6.2", "react": "19.1.0", "react-dom": "19.1.0", "react-error-boundary": "^6.0.0", "react-virtualized": "^9.22.6", "rxjs": "8.0.0-alpha.14", "sax": "^1.4.1", "source-map-support": "^0.5.21", "style-dictionary": "5.0.0-rc.1", "tdigest": "^0.1.2", "tinycolor2": "^1.6.0", "ua-parser-js": "2.0.3", "xregexp": "^5.1.2" } }