{ "private": true, "scripts": { "generate-graphql-api": "bundle exec rails generate zammad:graphql_introspection > app/graphql/graphql_introspection.json && pnpm exec graphql-codegen -c .graphql_code_generator.js", "generate-setting-types": "bundle exec rails generate zammad:setting_types", "dev": "RAILS_ENV=development forego start -r -f Procfile.dev", "dev:https": "VITE_RUBY_HOST=0.0.0.0 VITE_RUBY_HTTPS=true RAILS_ENV=development forego start -r -f Procfile.dev-https", "i18n": "rails generate zammad:translation_catalog", "lint": "pnpm lint:ts && pnpm lint:js && pnpm lint:css && pnpm lint:md && pnpm format:check", "lint:fix": "pnpm lint:ts && pnpm lint:js:fix && pnpm lint:css:fix && pnpm lint:md:fix && pnpm format", "lint:ts": "vue-tsc --noEmit", "lint:js": "pnpm lint:js:oxlint:cmd app/frontend/ .eslint-plugin-zammad/ && pnpm lint:js:eslint:cmd app/frontend/ .eslint-plugin-zammad/", "lint:js:fix": "pnpm lint:js:oxlint:cmd --fix app/frontend/ .eslint-plugin-zammad/ && pnpm lint:js:eslint:cmd --fix app/frontend/ .eslint-plugin-zammad/", "format": "pnpm format:cmd app/frontend/ .eslint-plugin-zammad/", "format:check": "pnpm format:check:cmd app/frontend/ .eslint-plugin-zammad/", "format:cmd": "oxfmt", "format:check:cmd": "oxfmt --check", "lint:js:eslint:cmd": "eslint --cache --cache-location ./tmp/cache/.eslintcache.js --cache-strategy content", "lint:js:oxlint:cmd": "oxlint --tsconfig tsconfig.json", "lint:css": "pnpm lint:css:cmd **/*.{scss,css,vue}", "lint:css:cmd": "stylelint", "lint:css:fix": "pnpm lint:css --fix", "lint:md": "pnpm lint:md:cmd '*.md' '**/*.md' '#.agents' '#.claude' '#node_modules' '#**/node_modules' '#tmp'", "lint:md:fix": "pnpm lint:md --fix", "lint:md:cmd": "pnpm exec markdownlint-cli2", "test": "VTL_SKIP_AUTO_CLEANUP=true TZ=utc vitest", "test:ct": "cd .dev/cypress; CY_OPEN=true pnpm exec cypress open --component --project ../../ --config-file .dev/cypress/cypress.config.mjs", "test:ci:ct": "cd .dev/cypress; CI=true pnpm exec cypress run --component --project ../../ --config-file .dev/cypress/cypress.config.mjs --browser electron", "cypress:snapshots": "sh .dev/cypress/visual-regression/snapshots.sh", "cypress:install": "pnpm --dir ./.dev/cypress install --frozen-lockfile", "analyse:vite-bundle": "pnpm exec vite-bundle-visualizer", "generate:install": "pnpm --dir ./.dev/hygen install --frozen-lockfile", "generate:generic-component": "pnpm --dir ./.dev/hygen exec hygen new generic-component", "generate:composable": "pnpm --dir ./.dev/hygen exec hygen new composable ", "generate:store": "pnpm --dir ./.dev/hygen exec hygen new store" }, "engines": { "node": ">=24", "pnpm": ">=11" }, "packageManager": "pnpm@11.1.3", "devDependencies": { "@faker-js/faker": "^10.4.0", "@graphql-codegen/cli": "^6.3.1", "@graphql-codegen/introspection": "^5.0.2", "@graphql-codegen/near-operation-file-preset": "^5.2.1", "@graphql-codegen/typescript": "^5.0.10", "@graphql-codegen/typescript-operations": "^5.1.0", "@graphql-codegen/typescript-vue-apollo": "^5.0.1", "@pinia/testing": "^1.0.3", "@sa11y/preset-rules": "^8.0.27", "@sa11y/vitest": "^8.0.27", "@sinonjs/fake-timers": "^15.4.0", "@tailwindcss/vite": "^4.3.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "@testing-library/vue": "^8.1.0", "@types/lodash-es": "^4.17.12", "@types/qrcode": "^1.5.6", "@types/qs": "^6.15.1", "@types/rails__actioncable": "^8.0.3", "@types/sinonjs__fake-timers": "^15.0.1", "@types/ua-parser-js": "^0.7.39", "@typescript-eslint/eslint-plugin": "^8.59.4", "@typescript-eslint/parser": "^8.59.4", "@vitejs/plugin-vue": "^6.0.7", "@vue/compiler-dom": "^3.5.34", "@vue/eslint-config-typescript": "^14.7.0", "@vue/server-renderer": "^3.5.34", "@vue/test-utils": "^2.4.10", "eslint": "^10.4.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import-x": "^4.16.2", "eslint-plugin-oxlint": "^1.66.0", "eslint-plugin-security": "^4.0.0", "eslint-plugin-vue": "^10.9.1", "eslint-plugin-vuejs-accessibility": "^2.5.0", "eslint-plugin-zammad": "file:.eslint-plugin-zammad", "jsdom": "^29.1.1", "markdownlint-cli2": "^0.22.1", "minimatch": "^10.2.5", "mock-apollo-client": "^1.4.0", "oxfmt": "^0.51.0", "oxlint": "^1.66.0", "regenerator-runtime": "^0.14.1", "stylelint": "^17.11.1", "stylelint-config-recommended-scss": "^17.0.1", "stylelint-config-recommended-vue": "^1.6.1", "stylelint-config-standard": "^40.0.0", "stylelint-config-standard-scss": "^17.0.0", "stylelint-scss": "^7.1.1", "svg-baker": "^1.7.0", "svgo": "^4.0.1", "tailwindcss": "^4.3.0", "timezone-mock": "^1.4.2", "type-fest": "^5.6.0", "typescript": "^6.0.3", "vite": "^8.0.14", "vite-plugin-pwa": "^1.3.0", "vite-plugin-ruby": "^5.2.2", "vitest": "^4.1.6", "vue-tsc": "^3.3.1" }, "dependencies": { "@apollo/client": "3.13.9", "@floating-ui/dom": "^1.7.6", "@floating-ui/vue": "^1.1.11", "@formkit/core": "^2.0.0", "@formkit/dev": "^2.0.0", "@formkit/drag-and-drop": "^0.5.3", "@formkit/i18n": "^2.0.0", "@formkit/inputs": "^2.0.0", "@formkit/rules": "^2.0.0", "@formkit/tailwindcss": "^2.0.0", "@formkit/themes": "^2.0.0", "@formkit/utils": "^2.0.0", "@formkit/validation": "^2.0.0", "@formkit/vue": "^2.0.0", "@rails/actioncable": "^7.2.301", "@tiptap/core": "^3.23.5", "@tiptap/extension-blockquote": "3.23.5", "@tiptap/extension-bold": "3.23.5", "@tiptap/extension-character-count": "3.23.5", "@tiptap/extension-code": "3.23.5", "@tiptap/extension-code-block": "3.23.5", "@tiptap/extension-code-block-lowlight": "3.23.5", "@tiptap/extension-color": "3.23.5", "@tiptap/extension-document": "3.23.5", "@tiptap/extension-hard-break": "3.23.5", "@tiptap/extension-heading": "3.23.5", "@tiptap/extension-horizontal-rule": "3.23.5", "@tiptap/extension-image": "3.23.5", "@tiptap/extension-italic": "3.23.5", "@tiptap/extension-link": "3.23.5", "@tiptap/extension-list": "3.23.5", "@tiptap/extension-mention": "3.23.5", "@tiptap/extension-paragraph": "3.23.5", "@tiptap/extension-placeholder": "3.23.5", "@tiptap/extension-strike": "3.23.5", "@tiptap/extension-table": "3.23.5", "@tiptap/extension-table-cell": "3.23.5", "@tiptap/extension-table-row": "3.23.5", "@tiptap/extension-text": "3.23.5", "@tiptap/extension-text-style": "3.23.5", "@tiptap/pm": "3.23.5", "@tiptap/starter-kit": "3.23.5", "@tiptap/suggestion": "3.23.5", "@tiptap/vue-3": "3.23.5", "@vue/apollo-composable": "^4.2.2", "@vue/runtime-core": "^3.5.34", "@vuepic/vue-datepicker": "^12.1.0", "@vueuse/core": "^14.3.0", "@vueuse/router": "^14.3.0", "@vueuse/shared": "^14.3.0", "async-mutex": "^0.5.0", "date-fns": "^4.2.1", "echarts": "^6.1.0", "graphql": "^16.14.0", "graphql-ruby-client": "^1.14.9", "graphql-tag": "^2.12.6", "linkify-string": "^4.3.3", "linkifyjs": "^4.3.3", "lodash-es": "^4.18.1", "loglevel": "^1.9.2", "lowlight": "^3.3.0", "mitt": "^3.0.1", "pinia": "^3.0.4", "qrcode": "^1.5.4", "qs": "^6.15.2", "spark-md5": "^3.0.2", "ts-essentials": "^10.2.0", "tslib": "^2.8.1", "ua-parser-js": "^2.0.9", "uuid": "^14.0.0", "vite-bundle-visualizer": "^1.2.1", "vue": "^3.5.34", "vue-advanced-cropper": "^2.8.9", "vue-easy-lightbox": "1.19.0", "vue-echarts": "^8.0.1", "vue-imask": "^7.6.1", "vue-router": "^5.0.7", "vue3-draggable-resizable": "^1.6.5", "workbox-core": "^7.4.1", "workbox-precaching": "^7.4.1", "workbox-window": "^7.4.1" }, "resolutions": { "loader-utils": "^3.3.1", "postcss": "^8.5.15", "stylelint-config-recommended": "^18.0.0" } }