{ "name": "mattermost-webapp", "browser": { "./client/web_client.jsx": "./client/browser_web_client.jsx" }, "version": "12.0.0", "private": true, "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "1.7.7", "@atlaskit/pragmatic-drag-and-drop-hitbox": "1.1.0", "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "3.2.12", "@floating-ui/react": "0.27.20", "@giphy/js-fetch-api": "5.7.0", "@giphy/react-components": "10.1.0", "@guyplusplus/turndown-plugin-gfm": "1.0.7", "@hello-pangea/dnd": "18.0.1", "@mattermost/client": "12.0.0", "@mattermost/desktop-api": "6.3.0-2", "@mattermost/shared": "12.0.0", "@mattermost/types": "12.0.0", "@mui/base": "5.0.0-beta.70", "@mui/material": "5.18.0", "@mui/styled-engine-sc": "5.14.12", "@redux-devtools/extension": "3.3.0", "@tanstack/react-table": "8.10.7", "@tippyjs/react": "4.2.6", "@tiptap/extension-code-block-lowlight": "3.20.0", "@tiptap/extension-link": "3.20.0", "@tiptap/extension-placeholder": "3.20.0", "@tiptap/extension-table": "3.20.0", "@tiptap/extension-table-cell": "3.20.0", "@tiptap/extension-table-header": "3.20.0", "@tiptap/extension-table-row": "3.20.0", "@tiptap/markdown": "3.20.0", "@tiptap/react": "3.20.0", "@tiptap/starter-kit": "3.20.0", "@types/color-hash": "1.0.2", "@types/react-is": "19.2.0", "@types/turndown": "5.0.5", "bootstrap": "3.4.1", "buffer": "6.0.3", "chart.js": "3.8.2", "classnames": "2.3.2", "color-contrast-checker": "2.1.0", "color-hash": "2.0.1", "core-js": "3.49.0", "country-list": "2.2.0", "crypto-browserify": "3.12.0", "css-vars-ponyfill": "2.4.8", "date-fns": "2.29.3", "emoji-regex": "10.2.1", "exif2css": "1.3.0", "fast-deep-equal": "3.1.3", "flexsearch": "0.6.32", "font-awesome": "4.7.0", "highlight.js": "11.6.0", "history": "4.10.1", "hoist-non-react-statics": "3.3.2", "html-to-react": "1.6.0", "ipaddr.js": "2.1.0", "katex": "0.16.21", "localforage": "1.10.0", "localforage-observable": "2.1.1", "lodash": "4.18.1", "lowlight": "3.3.0", "luxon": "3.6.1", "mark.js": "8.11.1", "marked": "github:mattermost/marked#c211e4ca4a8182f82cc16738d9fbcd7d026ce011", "memoize-one": "6.0.0", "moment-timezone": "0.5.38", "monaco-editor": "0.52.2", "monaco-editor-webpack-plugin": "7.1.0", "p-queue": "7.3.0", "pdfjs-dist": "4.10.38", "process": "0.11.10", "prop-types": "15.8.1", "react": "19.2.8", "react-bootstrap": "github:mattermost/react-bootstrap#d693ec8082954f0e6d3e826ca6161979b29001cd", "react-color": "2.19.3", "react-day-picker": "8.10.2", "react-dom": "19.2.8", "react-intl": "*", "react-is": "19.2.8", "react-overlays": "5.2.1", "react-redux": "9.2.0", "react-router-dom": "5.3.4", "react-select": "5.9.0", "react-transition-group": "4.4.5", "react-virtualized-auto-sizer": "1.0.25", "react-window": "1.8.11", "react-window-infinite-loader": "1.0.10", "rebound": "0.1.0", "redux": "5.0.1", "redux-batched-actions": "0.5.0", "redux-persist": "6.0.0", "redux-thunk": "3.1.0", "regenerator-runtime": "0.13.10", "semver": "7.6.3", "serialize-error": "11.0.3", "shallow-equals": "1.0.0", "simplebar-react": "3.3.2", "smooth-scroll-into-view-if-needed": "2.0.2", "stream-browserify": "3.0.0", "styled-components": "5.3.7", "timezones.json": "1.7.1", "tinycolor2": "1.6.0", "turndown": "7.2.2", "web-vitals": "5.0.3", "zen-observable": "0.10.0" }, "devDependencies": { "@deanwhillier/jest-matchmedia-mock": "1.2.0", "@mattermost/calls-common": "0.27.0", "@mattermost/eslint-plugin": "*", "@stylistic/stylelint-plugin": "3.1.2", "@testing-library/dom": "10.4.1", "@testing-library/jest-dom": "6.8.0", "@testing-library/react": "16.3.0", "@testing-library/user-event": "14.6.1", "@types/country-list": "2.1.0", "@types/jest": "30.0.0", "@types/katex": "0.11.0", "@types/lodash": "4.14.202", "@types/luxon": "3.0.2", "@types/mark.js": "8.11.6", "@types/marked": "0.7.4", "@types/react": "19.2.18", "@types/react-bootstrap": "0.32.35", "@types/react-color": "3.0.6", "@types/react-dom": "19.2.6", "@types/react-router-dom": "5.3.3", "@types/react-transition-group": "4.4.12", "@types/react-virtualized-auto-sizer": "1.0.1", "@types/react-window": "1.8.5", "@types/react-window-infinite-loader": "1.0.6", "@types/redux-mock-store": "1.5.0", "@types/regenerator-runtime": "0.13.8", "@types/scheduler": "0.16.8", "@types/semver": "7.5.8", "@types/shallow-equals": "1.0.3", "@types/styled-components": "5.1.36", "@types/tinycolor2": "1.4.6", "@types/zen-observable": "0.8.7", "babel-plugin-styled-components": "2.1.4", "copy-webpack-plugin": "14.0.0", "emoji-datasource": "6.1.1", "emoji-datasource-apple": "6.1.1", "emoji-datasource-google": "6.1.1", "eslint-import-resolver-webpack": "0.13.11", "eslint-plugin-formatjs": "6.4.15", "eslint-plugin-no-only-tests": "3.4.0", "external-remotes-plugin": "1.0.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.5.0", "identity-obj-proxy": "3.0.0", "image-minimizer-webpack-plugin": "5.0.0", "jest": "30.1.3", "jest-canvas-mock": "2.5.0", "jest-cli": "30.1.3", "jest-environment-jsdom": "30.1.0", "jest-watch-typeahead": "3.0.1", "nock": "13.2.8", "node-fetch": "2.7.0", "redux-mock-store": "1.5.4", "redux-persist-node-storage": "2.0.0", "sharp": "0.34.5", "stylelint": "16.10.0", "stylelint-config-idiomatic-order": "10.0.0", "stylelint-config-recommended-scss": "14.1.0", "stylelint-order": "6.0.4", "stylelint-scss": "6.8.1", "svgo": "2.8.2", "typescript-eslint-language-service": "5.0.5", "webpack-pwa-manifest": "4.3.0", "yargs": "17.7.2" }, "overrides": { "@mattermost/desktop-api": { "typescript": "$typescript" } }, "scripts": { "check": "npm run check:eslint && npm run check:stylelint", "check:eslint": "eslint ./src eslint.config.mjs --quiet --cache", "check:stylelint": "stylelint \"**/*.{css,scss}\" --cache", "fix": "eslint ./src eslint.config.mjs --quiet --fix --cache && stylelint \"**/*.{css,scss}\" --fix --cache", "build": "cross-env NODE_ENV=production webpack", "run": "webpack --progress --watch", "dev-server": "webpack serve --mode development", "test": "cross-env TZ=Etc/UTC LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 jest", "test:watch": "cross-env TZ=Etc/UTC LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 jest --watch", "test:updatesnapshot": "cross-env TZ=Etc/UTC LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 jest --updateSnapshot", "test:debug": "cross-env TZ=Etc/UTC LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 jest --forceExit --detectOpenHandles --verbose", "test-ci": "cross-env TZ=Etc/UTC LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 jest --ci --maxWorkers=100% --forceExit --detectOpenHandles --logHeapUsage --coverage", "clean": "rm -rf dist node_modules .eslintcache .stylelintcache tsconfig.tsbuildinfo", "stats": "cross-env NODE_ENV=production webpack --profile --json > webpack_stats.json", "i18n-extract": "formatjs extract 'src/**/*.{js,jsx,ts,tsx}' '../platform/shared/src/**/*.{js,jsx,ts,tsx}' --additional-function-names localizeMessage --ignore '**/*.d.ts' --ignore '**/*.test.*' --out-file src/i18n/en.json --format scripts/formatter.js --id-interpolation-pattern '[sha512:contenthash:base64:6]' --preserve-whitespace", "i18n-extract:check": "npm run i18n-extract -- --throws --out-file .i18n-check.tmp.json && diff src/i18n/en.json .i18n-check.tmp.json && rm -f .i18n-check.tmp.json || (rm -f .i18n-check.tmp.json && echo '\nen.json is out of sync with code. \nTo update: npm run i18n-extract' && exit 1)", "i18n-verify-translations": "node scripts/check_icu.mjs src/i18n", "check-types": "tsc -b", "make-emojis": "node --experimental-json-modules build/emoji/make_emojis.mjs" } }