{ "name": "openproject-frontend", "repository": "https://github.com/opf/openproject", "license": "GPLv3", "version": "0.1.0", "private": true, "devDependencies": { "@angular-builders/custom-esbuild": "^22.0.0", "@angular/language-service": "22.0.0", "@eslint/js": "^10.0.1", "@html-eslint/eslint-plugin": "^0.61.0", "@html-eslint/parser": "^0.61.0", "@stylistic/eslint-plugin": "^5.10.0", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/codemirror": "5.60.17", "@types/dom-navigation": "^1.0.7", "@types/dragula": "^3.7.5", "@types/flot": "^0.0.36", "@types/hammerjs": "^2.0.36", "@types/hotwired__turbo": "^8.0.10", "@types/jquery": "^4.0.1", "@types/jquery-migrate": "^3.3.3", "@types/lodash": "^4.17.24", "@types/mousetrap": "^1.6.3", "@types/node": "^25.9.1", "@types/pako": "^2.0.4", "@types/rails__request.js": "^0.0.1", "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@types/resize-observer-browser": "^0.1.4", "@types/urijs": "^1.19.26", "@types/webpack-env": "^1.16.0", "@typescript-eslint/eslint-plugin": "8.60.1", "@typescript-eslint/parser": "8.60.1", "@vitest/browser-playwright": "^4.1.7", "@vitest/coverage-v8": "^4.1.7", "@vitest/eslint-plugin": "^1.6.18", "angular-eslint": "^22.0.0", "browserslist": "^4.28.1", "eslint": "^10.3.0", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.6.0", "jsdom": "^29.1.1", "patch-package": "^8.0.1", "playwright": "^1.59.1", "source-map-explorer": "^2.5.2", "ts-node": "~10.9.2", "typescript": "^6.0.3", "typescript-eslint": "^8.59.4", "vitest": "^4.1.7", "wscat": "^6.1.0" }, "dependencies": { "@angular/animations": "^22.0.0", "@angular/cdk": "^22.0.0", "@angular/cli": "^22.0.0", "@angular/common": "^22.0.0", "@angular/compiler": "^22.0.0", "@angular/compiler-cli": "^22.0.0", "@angular/core": "^22.0.0", "@angular/elements": "^22.0.0", "@angular/forms": "^22.0.0", "@angular/platform-browser": "^22.0.0", "@angular/platform-browser-dynamic": "^22.0.0", "@angular/router": "^22.0.0", "@appsignal/javascript": "^1.6.1", "@appsignal/plugin-breadcrumbs-console": "^1.1.37", "@appsignal/plugin-breadcrumbs-network": "^1.1.24", "@blocknote/core": "^0.51.4", "@blocknote/mantine": "^0.51.4", "@blocknote/react": "^0.51.3", "@braintree/sanitize-url": "^7.1.2", "@datorama/akita": "^8.0.1", "@floating-ui/dom": "^1.2.1", "@fullcalendar/angular": "^6.1.20", "@fullcalendar/common": "^5.11.5", "@fullcalendar/core": "^6.1.20", "@fullcalendar/daygrid": "^6.1.20", "@fullcalendar/interaction": "^6.1.20", "@fullcalendar/list": "^6.1.20", "@fullcalendar/moment": "^6.1.20", "@fullcalendar/moment-timezone": "^6.1.20", "@fullcalendar/multimonth": "^6.1.20", "@fullcalendar/resource": "^6.1.20", "@fullcalendar/resource-common": "^5.11.5", "@fullcalendar/resource-timeline": "^6.1.20", "@fullcalendar/timegrid": "^6.1.20", "@github/webauthn-json": "^2.1.1", "@hocuspocus/provider": "^3.4.4", "@hotwired/stimulus": "^3.2.2", "@hotwired/turbo": "^8.0.23", "@hotwired/turbo-rails": "^8.0.23", "@knowledgecode/delegate": "^0.10.4", "@kolkov/ngx-gallery": "^2.0.1", "@mantine/core": "^9.0.1", "@mantine/hooks": "^9.3.0", "@mantine/utils": "^6.0.22", "@ng-select/ng-option-highlight": "^23.0.0", "@ng-select/ng-select": "^23.0.0", "@ngneat/content-loader": "^7.0.0", "@openproject/octicons-angular": "^19.35.0", "@openproject/primer-view-components": "^0.86.2", "@openproject/reactivestates": "^3.0.1", "@primer/css": "^22.1.0", "@primer/live-region-element": "^0.8.0", "@primer/primitives": "^11.5.1", "@primer/view-components": "npm:@openproject/primer-view-components@^0.86.2", "@rails/request.js": "^0.0.13", "@stimulus-components/auto-submit": "^6.0.0", "@stimulus-components/reveal": "^5.0.0", "@tiptap/extensions": "^3.23.6", "@uirouter/angular": "^21.0.0", "@uirouter/core": "^6.1.2", "@uirouter/rx": "^1.0.0", "@w11k/ngx-componentdestroyed": "^5.0.2", "@xeokit/xeokit-bim-viewer": "2.7.1", "autoprefixer": "^10.5.0", "byte-base64": "^1.1.0", "chart.js": "4.5.1", "chartjs-adapter-luxon": "^1.3.1", "chartjs-plugin-datalabels": "^2.2.0", "codemirror": "^5.65.21", "copy-text-to-clipboard": "^3.2.2", "core-js": "^3.49.0", "crossvent": "^1.5.4", "dom-autoscroller": "^2.2.8", "dom-plane": "^1.0.2", "dragula": "^3.7.3", "es6-slide-up-down": "^1.0.0", "flatpickr": "^4.6.13", "glob": "^13.0.6", "hammerjs": "^2.0.8", "i18n-js": "^4.3.0", "idiomorph": "^0.7.4", "jquery": "^4.0.0", "jquery-migrate": "^4.0.2", "json5": "^2.2.2", "lit-html": "^3.3.3", "lodash": "^4.18.1", "luxon": "^3.7.2", "mdx-embed": "^1.1.2", "mime": "^4.1.0", "moment": "^2.30.1", "moment-timezone": "^0.6.2", "mousetrap": "~1.6.3", "ng-dynamic-component": "^10.7.0", "ng2-charts": "^10.0.0", "ng2-dragula": "^6.0.0", "ngx-cookie-service": "^21.3.1", "observable-array": "0.0.4", "op-blocknote-extensions": "https://github.com/opf/op-blocknote-extensions/releases/download/v0.1.2/op-blocknote-extensions-0.1.2.tgz", "openapi-explorer": "^2.4.799", "pako": "^2.0.3", "qr-creator": "^1.0.0", "react": "^19.2.6", "react-dom": "^19.2.6", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.0", "screenfull": "^6.0.2", "stimulus-use": "^0.52.2", "tablesorter": "^2.31.3", "tiny-invariant": "^1.3.3", "ts-action": "^11.0.0", "ts-action-operators": "^9.1.2", "turbo_power": "^0.7.1", "typedjson": "^1.5.1", "urijs": "^1.19.11", "uuid": "^14.0.0" }, "optionalDependencies": { "fsevents": "*" }, "browser": { "fs": false, "path": false, "os": false }, "scripts": { "analyze": "ng build --configuration production --stats-json && npx esbuild-visualizer --metadata ../public/assets/frontend/stats.json", "build": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --configuration production --named-chunks --source-map", "build:watch": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --watch --named-chunks", "ci:plugins:register_frontend": "node ci-plugins-generator.js", "serve": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve --host ${FE_HOST:-localhost} --port ${FE_PORT:-4200} --serve-path ${RAILS_RELATIVE_URL_ROOT}/assets/frontend", "test": "ng test --watch=false", "test:watch": "ng test --watch=true", "lint": "ng lint", "lint:fix": "ng lint --fix", "generate-typings": "tsc -d -p tsconfig.app.json", "postinstall": "patch-package" } }