From a948920ce2da5fd120a6b64390406a9495ecf489 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 18:08:26 +0530 Subject: [PATCH 001/112] React inital setup done --- .gitignore | 2 + package-lock.json | 5208 +++++++++++++++++++++++++++++ package.json | 25 +- public/manifest.json | 30 + src/background/background.js | 0 src/contenScript/contentScript.js | 0 src/popup.css | 8 + src/popup.html | 13 + src/popup.jsx | 18 + tailwind.config.js | 11 + webpack.config.js | 50 + webpack.dev.js | 7 + webpack.prod.js | 6 + 13 files changed, 5377 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 public/manifest.json create mode 100644 src/background/background.js create mode 100644 src/contenScript/contentScript.js create mode 100644 src/popup.css create mode 100644 src/popup.html create mode 100644 src/popup.jsx create mode 100644 tailwind.config.js create mode 100644 webpack.config.js create mode 100644 webpack.dev.js create mode 100644 webpack.prod.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..05766bf --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5208 @@ +{ + "name": "linkcollect-extension", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "linkcollect-extension", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "autoprefixer": "^10.4.14", + "css-loader": "^6.7.3", + "postcss": "^8.4.21", + "postcss-loader": "^7.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "style-loader": "^3.3.2" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/preset-env": "^7.21.4", + "@babel/preset-react": "^7.18.6", + "babel-loader": "^9.1.2", + "copy-webpack-plugin": "^11.0.0", + "html-webpack-plugin": "^5.5.0", + "tailwindcss": "^3.3.1", + "webpack": "^5.77.0", + "webpack-cli": "^5.0.1", + "webpack-merge": "^5.8.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", + "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.21.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz", + "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz", + "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz", + "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001473", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001473.tgz", + "integrity": "sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js-compat": { + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.1.tgz", + "integrity": "sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.348", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.348.tgz", + "integrity": "sha512-gM7TdwuG3amns/1rlgxMbeeyNoBFPa+4Uu0c7FeROWh4qWmvSOnvcslKmWy51ggLKZ2n/F/4i2HJ+PVNxH9uCQ==" + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.1.0.tgz", + "integrity": "sha512-vTD2DJ8vJD0Vr1WzMQkRZWRjcynGh3t7NeoLg+Sb1TeuK7etiZfL/ZwHbaVa3M+Qni7Lj/29voV9IggnIUjlIw==", + "dependencies": { + "cosmiconfig": "^8.0.0", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-loader": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.2.tgz", + "integrity": "sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/sucrase": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz", + "integrity": "sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==", + "dev": true, + "dependencies": { + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", + "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.17.2", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1", + "sucrase": "^3.29.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", + "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.77.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.77.0.tgz", + "integrity": "sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz", + "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.0.1", + "@webpack-cli/info": "^2.0.1", + "@webpack-cli/serve": "^2.0.1", + "colorette": "^2.0.14", + "commander": "^9.4.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + } +} diff --git a/package.json b/package.json index 49dcb50..c860587 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "description": "More than a BookMarking tool", "main": "index.js", "scripts": { + "dev": "webpack --watch --config webpack.dev.js", + "build": "webpack --config webpack.prod.js", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -15,5 +17,26 @@ "bugs": { "url": "https://github.com/linkcollect/LinkCollect-Extension/issues" }, - "homepage": "https://github.com/linkcollect/LinkCollect-Extension#readme" + "homepage": "https://github.com/linkcollect/LinkCollect-Extension#readme", + "dependencies": { + "autoprefixer": "^10.4.14", + "css-loader": "^6.7.3", + "postcss": "^8.4.21", + "postcss-loader": "^7.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "style-loader": "^3.3.2" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/preset-env": "^7.21.4", + "@babel/preset-react": "^7.18.6", + "babel-loader": "^9.1.2", + "copy-webpack-plugin": "^11.0.0", + "html-webpack-plugin": "^5.5.0", + "tailwindcss": "^3.3.1", + "webpack": "^5.77.0", + "webpack-cli": "^5.0.1", + "webpack-merge": "^5.8.0" + } } diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..f4df4b6 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,30 @@ +{ + "name": "LinkCollect", + "version": "0.1.0", + "description": "More than A Bookmark", + "permissions": ["storage", "tabs","scripting","activeTab"], + "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"], + "background": { + "service_worker": "background.js" + }, + "content_scripts": [ + { + "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"], + "js": ["contentScript.js"] + } + ], + "web_accessible_resources": [ + { + "resources": [ + "assets/bookmark.png" + ], + "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"] + } + ], + "action": { + "default_title": "PinnBorad", + "default_popup": "popup.html" + }, + "manifest_version": 3 + } + \ No newline at end of file diff --git a/src/background/background.js b/src/background/background.js new file mode 100644 index 0000000..e69de29 diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js new file mode 100644 index 0000000..e69de29 diff --git a/src/popup.css b/src/popup.css new file mode 100644 index 0000000..84d6558 --- /dev/null +++ b/src/popup.css @@ -0,0 +1,8 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +body{ + height: "300px"; + width: "400px"; + background-color: blue; +} diff --git a/src/popup.html b/src/popup.html new file mode 100644 index 0000000..b541f9d --- /dev/null +++ b/src/popup.html @@ -0,0 +1,13 @@ + + + + + + + Document + + + +
Pinboard
+ + \ No newline at end of file diff --git a/src/popup.jsx b/src/popup.jsx new file mode 100644 index 0000000..d9d3709 --- /dev/null +++ b/src/popup.jsx @@ -0,0 +1,18 @@ +import React from "react"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import "./popup.css" +const Popup = ()=>{ + return
LinkCollect
+} + +const rootElement = document.getElementById("linkcollect-target"); +const root = createRoot(rootElement); + + +root.render( + + + + ); + \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..6c4a266 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './src/**/*.{html,js,jsx}' + ], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..0ba58eb --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,50 @@ +const path = require("path"); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyPlugin = require('copy-webpack-plugin'); +const autoprefixer = require("autoprefixer"); +const tailwindcss = require("tailwindcss"); +module.exports = { + entry:{ + popup:"./src/popup.jsx", + background:"./src/background/background.js", + contentScript: "./src/background/background.js" + }, + output:{ + path: path.resolve(__dirname,'dist'), + filename:"[name].js" + }, + module: { + rules: [{ + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options : { + presets:['@babel/preset-env','@babel/preset-react'] + } + } + },{ + use:['style-loader','css-loader', + { + loader:'postcss-loader', + options:{ + postcssOptions:{ + ident:'postcss', + plugins:[tailwindcss,autoprefixer] + } + } + } + ], + test:/\.css$/i, + }], + }, + plugins: [new HtmlWebpackPlugin({ + template: './src/popup.html' , + filename: "popup.html" + }), + new CopyPlugin({patterns:[ + { from: 'public'} + + ]}), +], +} \ No newline at end of file diff --git a/webpack.dev.js b/webpack.dev.js new file mode 100644 index 0000000..9e5f8e2 --- /dev/null +++ b/webpack.dev.js @@ -0,0 +1,7 @@ +const {merge} = require("webpack-merge"); +const config = require("./webpack.config.js"); + +module.exports = merge(config,{ + mode: "development", + devtool: "inline-source-map" +}) \ No newline at end of file diff --git a/webpack.prod.js b/webpack.prod.js new file mode 100644 index 0000000..7d13f7a --- /dev/null +++ b/webpack.prod.js @@ -0,0 +1,6 @@ +const {merge} = require("webpack-merge"); +const config = require(".webpack.config.js"); + +module.exports = merge(config,{ + mode: "production", +}) \ No newline at end of file From 640e501328cf10d30cfcd8b64e0131a446d94481 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 19:44:43 +0530 Subject: [PATCH 002/112] Logo added --- src/assets/Logo.svg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/assets/Logo.svg diff --git a/src/assets/Logo.svg b/src/assets/Logo.svg new file mode 100644 index 0000000..5c4d10d --- /dev/null +++ b/src/assets/Logo.svg @@ -0,0 +1,4 @@ + + + + From 23f54bf70bb3b3129edb343ab9398c07b177021f Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 19:45:09 +0530 Subject: [PATCH 003/112] Logo comilation added to webpack --- webpack.config.js | 93 ++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 0ba58eb..9592d05 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,50 +1,53 @@ const path = require("path"); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CopyPlugin = require('copy-webpack-plugin'); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const CopyPlugin = require("copy-webpack-plugin"); const autoprefixer = require("autoprefixer"); const tailwindcss = require("tailwindcss"); module.exports = { - entry:{ - popup:"./src/popup.jsx", - background:"./src/background/background.js", - contentScript: "./src/background/background.js" - }, - output:{ - path: path.resolve(__dirname,'dist'), - filename:"[name].js" - }, - module: { - rules: [{ - test: /\.(js|jsx)$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options : { - presets:['@babel/preset-env','@babel/preset-react'] - } - } - },{ - use:['style-loader','css-loader', - { - loader:'postcss-loader', - options:{ - postcssOptions:{ - ident:'postcss', - plugins:[tailwindcss,autoprefixer] - } - } - } - ], - test:/\.css$/i, - }], - }, - plugins: [new HtmlWebpackPlugin({ - template: './src/popup.html' , - filename: "popup.html" + entry: { + popup: "./src/popup.jsx", + background: "./src/background/background.js", + contentScript: "./src/background/background.js", + }, + output: { + path: path.resolve(__dirname, "dist"), + filename: "[name].js", + }, + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: ["@babel/preset-env", "@babel/preset-react"], + }, + }, + }, + { + use: [ + "style-loader", + "css-loader", + { + loader: "postcss-loader", + options: { + postcssOptions: { + ident: "postcss", + plugins: [tailwindcss, autoprefixer], + }, + }, + }, + ], + test: /\.css$/i, + }, + ], + }, + plugins: [ + new HtmlWebpackPlugin({ + template: "./src/popup.html", + filename: "popup.html", }), - new CopyPlugin({patterns:[ - { from: 'public'} - - ]}), -], -} \ No newline at end of file + new CopyPlugin({ patterns: [{ from: "public" },{from:path.resolve("./src/assets")}] }), + ], +}; From a99746c553cfe0f726f5775213552a00dd6cb36d Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 19:48:45 +0530 Subject: [PATCH 004/112] Colors added --- tailwind.config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tailwind.config.js b/tailwind.config.js index 6c4a266..4db6b9f 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -5,6 +5,11 @@ module.exports = { ], theme: { extend: {}, + colors:{ + primary:"#2B5ACD", + blackbg : "#151515", + lightgrey:"#202427" + } }, plugins: [], } From 91222087fe075194e7db0459919570a816714215 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 19:53:31 +0530 Subject: [PATCH 005/112] svg configuration added --- webpack.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/webpack.config.js b/webpack.config.js index 9592d05..f7aba43 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -41,6 +41,10 @@ module.exports = { ], test: /\.css$/i, }, + { + test: /\.(png|jp(e*)g|svg|gif)$/, + type: "asset", + } ], }, plugins: [ From 48b66a68852eaa4dcccf00622650ea42d2a458a5 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:27:08 +0530 Subject: [PATCH 006/112] Genral layout created --- src/Layout/Layout.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/Layout/Layout.js diff --git a/src/Layout/Layout.js b/src/Layout/Layout.js new file mode 100644 index 0000000..d79d520 --- /dev/null +++ b/src/Layout/Layout.js @@ -0,0 +1,12 @@ +import React from "react"; +import Navbar from "../Components/Navbar/Navbar"; +const Layout = ({ children }) => { + return ( +
+ + {children} +
+ ); +}; + +export default Layout; From 73e9795cd7493c0cc9bf91ba4d57afe2af71b325 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:27:18 +0530 Subject: [PATCH 007/112] Navbar created --- src/Components/Navbar/Navbar.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/Components/Navbar/Navbar.js diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js new file mode 100644 index 0000000..86abd17 --- /dev/null +++ b/src/Components/Navbar/Navbar.js @@ -0,0 +1,20 @@ +import React from 'react' +import logo from "../../assets/Logo.svg" +import linkArrow from "../../assets/linkArrow.svg" +const Navbar = () => { + return ( + + ) +} + +export default Navbar \ No newline at end of file From 7139c6640ed34f586c5d7d5b0b679ddbae64f8f9 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:27:31 +0530 Subject: [PATCH 008/112] arrow for link created --- src/assets/linkArrow.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/assets/linkArrow.svg diff --git a/src/assets/linkArrow.svg b/src/assets/linkArrow.svg new file mode 100644 index 0000000..5d3d1f7 --- /dev/null +++ b/src/assets/linkArrow.svg @@ -0,0 +1,3 @@ + + + From cadfaf5fd5be94946807292bf5cdf91d005cd1a8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:27:48 +0530 Subject: [PATCH 009/112] color for text added --- tailwind.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tailwind.config.js b/tailwind.config.js index 4db6b9f..9ab1c89 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -8,7 +8,8 @@ module.exports = { colors:{ primary:"#2B5ACD", blackbg : "#151515", - lightgrey:"#202427" + darkgrey:"#202427", + lightText:"#9CA3AF" } }, plugins: [], From 23efbe531ba5f7c97f536adaea89dc3cdcb319f3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:28:03 +0530 Subject: [PATCH 010/112] Home screen created --- src/Screens/Home.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/Screens/Home.js diff --git a/src/Screens/Home.js b/src/Screens/Home.js new file mode 100644 index 0000000..2ade699 --- /dev/null +++ b/src/Screens/Home.js @@ -0,0 +1,16 @@ +import React from 'react' +import logo from "../assets/Logo.svg" +const Home = () => { + return ( +
+ +
+

More than a bookmarking tool

+

Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit.

+ +
+
+ ) +} + +export default Home \ No newline at end of file From c776928e4669945197e6799afaedeedfff893199 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:51:36 +0530 Subject: [PATCH 011/112] Login created --- src/Screens/Login.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/Screens/Login.js diff --git a/src/Screens/Login.js b/src/Screens/Login.js new file mode 100644 index 0000000..f44bba2 --- /dev/null +++ b/src/Screens/Login.js @@ -0,0 +1,15 @@ +import React from 'react' +import logo from "../assets/Logo.svg" +const Login = () => { + return ( +
+ +
+ + +
+
+ ) +} + +export default Login \ No newline at end of file From e8684a2b3a0c0e9961937441f1b967a2b271339c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 21:51:44 +0530 Subject: [PATCH 012/112] Text update --- src/Screens/Home.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 2ade699..f3a3ef1 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -6,8 +6,12 @@ const Home = () => {

More than a bookmarking tool

-

Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint. Velit officia consequat duis enim velit mollit.

- +

+ Save from anywhere + Share to anyone + Import anyone +

+
) From a2a3312d7810110450e4e0fc9e6e928acc2487b3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 22:04:55 +0530 Subject: [PATCH 013/112] Name chnage to splash of home --- src/Screens/Splash.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/Screens/Splash.js diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js new file mode 100644 index 0000000..f3a3ef1 --- /dev/null +++ b/src/Screens/Splash.js @@ -0,0 +1,20 @@ +import React from 'react' +import logo from "../assets/Logo.svg" +const Home = () => { + return ( +
+ +
+

More than a bookmarking tool

+

+ Save from anywhere + Share to anyone + Import anyone +

+ +
+
+ ) +} + +export default Home \ No newline at end of file From b1ac356aa768955e62d1121425c5cd3638844c4a Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 1 Apr 2023 22:05:08 +0530 Subject: [PATCH 014/112] Home new created --- src/Screens/Home.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index f3a3ef1..5eda427 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,17 +1,11 @@ import React from 'react' -import logo from "../assets/Logo.svg" + const Home = () => { return ( -
- -
-

More than a bookmarking tool

-

- Save from anywhere - Share to anyone - Import anyone -

- +
+
+

Collection list8

+
) From 5d05b1913ba4ae1eabb515a06e41ba1c8be0fd56 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:02:12 +0530 Subject: [PATCH 015/112] Fnction name fix --- src/Screens/Splash.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index f3a3ef1..5f43eac 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -1,6 +1,6 @@ import React from 'react' import logo from "../assets/Logo.svg" -const Home = () => { +const Splash = () => { return (
@@ -17,4 +17,4 @@ const Home = () => { ) } -export default Home \ No newline at end of file +export default Splash \ No newline at end of file From 4bfa3cb59bee5d2c7a92761db95d3f400757fd75 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:02:31 +0530 Subject: [PATCH 016/112] Home page collection created --- .../CollectiionItem/CollectionItem.js | 25 +++++++++++++++++++ src/Screens/Home.js | 21 ++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 src/Components/CollectiionItem/CollectionItem.js diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js new file mode 100644 index 0000000..7ca2b2e --- /dev/null +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -0,0 +1,25 @@ +import React from 'react' +import logo from "../../assets/Logo.svg" +import CopyIcon from "../../assets/copy.svg" +import AddIcon from "../../assets/add.svg" +import ShareIcon from "../../assets/linkArrowLight.svg" +const CollectionItem = ({thumbnail,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { + return ( +
+
+ +
+

{name}

+

{count}{" "}Bookmarks

+
+
+
+ + + +
+
+ ) +} + +export default CollectionItem \ No newline at end of file diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 5eda427..083a06f 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,11 +1,22 @@ import React from 'react' - +import addIcon from '../assets/add.svg' +import ArrowIcon from "../assets/linkArrowLight.svg" +import CollectionItem from '../Components/CollectiionItem/CollectionItem' const Home = () => { return ( -
-
-

Collection list8

- +
+
+

Collection list8

+ +
+
+ + + + +
+
) From 8e0b6e105ff90f03b943efa02db5a4104afb4d4b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:03:10 +0530 Subject: [PATCH 017/112] icon added --- src/assets/add.svg | 3 +++ src/assets/copy.svg | 3 +++ src/assets/linkArrowLight.svg | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 src/assets/add.svg create mode 100644 src/assets/copy.svg create mode 100644 src/assets/linkArrowLight.svg diff --git a/src/assets/add.svg b/src/assets/add.svg new file mode 100644 index 0000000..123aa18 --- /dev/null +++ b/src/assets/add.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/copy.svg b/src/assets/copy.svg new file mode 100644 index 0000000..7434168 --- /dev/null +++ b/src/assets/copy.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/linkArrowLight.svg b/src/assets/linkArrowLight.svg new file mode 100644 index 0000000..4818fd3 --- /dev/null +++ b/src/assets/linkArrowLight.svg @@ -0,0 +1,3 @@ + + + From 9e18e45b5604e90287c596518a96202e085db7bb Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:03:19 +0530 Subject: [PATCH 018/112] color profiles added --- tailwind.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tailwind.config.js b/tailwind.config.js index 9ab1c89..a9bc8e0 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -8,6 +8,9 @@ module.exports = { colors:{ primary:"#2B5ACD", blackbg : "#151515", + lightblackbg: "#101521", + blackbgOne:"#0D131D", + blackbgTwo: "#141C27", darkgrey:"#202427", lightText:"#9CA3AF" } From 6f13088bc448b6ccb7fd6b6564ffeb947ea1168f Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:03:33 +0530 Subject: [PATCH 019/112] popup js screens added --- src/popup.css | 3 ++- src/popup.jsx | 31 +++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/popup.css b/src/popup.css index 84d6558..6851a87 100644 --- a/src/popup.css +++ b/src/popup.css @@ -4,5 +4,6 @@ body{ height: "300px"; width: "400px"; - background-color: blue; + background: none; + color: #ffff; } diff --git a/src/popup.jsx b/src/popup.jsx index d9d3709..220c234 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -1,18 +1,29 @@ import React from "react"; import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import "./popup.css" -const Popup = ()=>{ - return
LinkCollect
-} +import "./popup.css"; +import Splash from "./Screens/Splash"; +import Layout from "./Layout/Layout"; +import Login from "./Screens/Login"; +import Home from "./Screens/Home"; +const Popup = () => { + return ( + <> + + + {/* */} + {/* */} + + + + ); +}; const rootElement = document.getElementById("linkcollect-target"); const root = createRoot(rootElement); - root.render( - - - - ); - \ No newline at end of file + + + +); From 4b3899b8481f3b8fd9b22faf5989f91eb19385cf Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 00:14:49 +0530 Subject: [PATCH 020/112] Apdding added to navabr --- src/Components/Navbar/Navbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index 86abd17..f3ded96 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -3,7 +3,7 @@ import logo from "../../assets/Logo.svg" import linkArrow from "../../assets/linkArrow.svg" const Navbar = () => { return ( -
+
From f00af5f2b3d1a4771b5237ce38f47a1c5ab53078 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 01:48:37 +0530 Subject: [PATCH 021/112] New Collection added --- src/Components/Input/Input.js | 33 ++++++++++++++++++++++++++++++++ src/Screens/NewCollection.js | 36 +++++++++++++++++++++++++++++++++++ src/popup.jsx | 4 +++- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/Components/Input/Input.js create mode 100644 src/Screens/NewCollection.js diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js new file mode 100644 index 0000000..2de0fa1 --- /dev/null +++ b/src/Components/Input/Input.js @@ -0,0 +1,33 @@ +import React from "react"; + +const classMapper = { + fileClass : `block w-full text-sm text-slate-500 bg-blackbgOne border border-lightText rounded-md py-2 px-3 + file:mr-4 file:py-0 file:px-4 + file:rounded-full file:border-0 + file:text-[12px] file:font-light + file:bg-blackbgTwo file:text-lightText + hover:file:bg-violet-100 + `, + textClass : "mt-1 px-3 py-2 bg-blackbgOne border border-lightText placeholder-lightText focus:outline-none block w-full rounded-md sm:text-sm" +} + + +const Input = ({name,type,label,placeholder,onInputHandler,inputClass}) => { + return ( + + ); +}; + +export default Input; diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js new file mode 100644 index 0000000..ccbde1e --- /dev/null +++ b/src/Screens/NewCollection.js @@ -0,0 +1,36 @@ +import React from "react"; +import Input from "../Components/Input/Input"; + + + +const NewCollection = () => { + const onInput = (e)=>{ + console.log(e.target.value) + } + const onInputFile = (e)=>{ + console.log(e.target.value) + } + return ( +
+
+ + + +
+
+ ); +}; + +export default NewCollection; diff --git a/src/popup.jsx b/src/popup.jsx index 220c234..dcb6d4b 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -6,6 +6,7 @@ import Splash from "./Screens/Splash"; import Layout from "./Layout/Layout"; import Login from "./Screens/Login"; import Home from "./Screens/Home"; +import NewCollection from "./Screens/NewCollection"; const Popup = () => { return ( <> @@ -13,7 +14,8 @@ const Popup = () => { {/* */} {/* */} - + {/* */} + ); From 272fc063695aa4e517f72503ae1f1cad00e46b8c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 11:19:28 +0530 Subject: [PATCH 022/112] Back button added --- src/Components/Input/Input.js | 1 + src/Screens/NewCollection.js | 9 +++++++-- src/assets/angleArrow.svg | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 src/assets/angleArrow.svg diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js index 2de0fa1..ecd4340 100644 --- a/src/Components/Input/Input.js +++ b/src/Components/Input/Input.js @@ -7,6 +7,7 @@ const classMapper = { file:text-[12px] file:font-light file:bg-blackbgTwo file:text-lightText hover:file:bg-violet-100 + file:cursor-pointer `, textClass : "mt-1 px-3 py-2 bg-blackbgOne border border-lightText placeholder-lightText focus:outline-none block w-full rounded-md sm:text-sm" } diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index ccbde1e..1d40230 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -1,6 +1,6 @@ import React from "react"; import Input from "../Components/Input/Input"; - +import BackArrow from "../assets/angleArrow.svg" const NewCollection = () => { @@ -11,7 +11,11 @@ const NewCollection = () => { console.log(e.target.value) } return ( -
+ <> +
+ +
+
{
+ ); }; diff --git a/src/assets/angleArrow.svg b/src/assets/angleArrow.svg new file mode 100644 index 0000000..27df890 --- /dev/null +++ b/src/assets/angleArrow.svg @@ -0,0 +1,3 @@ + + + From ca18b9000f7c5fae06069e4a732a5b65a21e8eb8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 11:28:23 +0530 Subject: [PATCH 023/112] Style update --- src/Screens/NewCollection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index 1d40230..8f0e3e6 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -13,7 +13,7 @@ const NewCollection = () => { return ( <>
- +
From 541502908eb0c55916f1eac2cbc502956142149b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 13:51:53 +0530 Subject: [PATCH 024/112] Style fixing --- src/Screens/NewCollection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index 8f0e3e6..657095a 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -13,7 +13,7 @@ const NewCollection = () => { return ( <>
- +
From 298169cf6a0320615dabeb36db64083ca01d16f4 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 13:52:15 +0530 Subject: [PATCH 025/112] Style fix --- src/Components/CollectiionItem/CollectionItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index 7ca2b2e..a050b42 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -10,7 +10,7 @@ const CollectionItem = ({thumbnail,name,count,copyLinkHandler,shareLinkHandler,a

{name}

-

{count}{" "}Bookmarks

+

{count}{" "}Bookmarks

From 634b823a795594c68121e333d18a4d3f8846c440 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 13:52:34 +0530 Subject: [PATCH 026/112] Bookmarks screen created --- src/Components/BookmarkItem/BookmarkItem.js | 25 ++++++++ src/Components/ToogleButton/ToggleButton.js | 12 ++++ src/Screens/Bookmarks.js | 71 +++++++++++++++++++++ src/assets/3dots.svg | 3 + src/assets/copySquare.svg | 3 + src/assets/delete.svg | 3 + src/assets/openLink.svg | 3 + src/popup.css | 17 +++++ src/popup.jsx | 4 +- 9 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 src/Components/BookmarkItem/BookmarkItem.js create mode 100644 src/Components/ToogleButton/ToggleButton.js create mode 100644 src/Screens/Bookmarks.js create mode 100644 src/assets/3dots.svg create mode 100644 src/assets/copySquare.svg create mode 100644 src/assets/delete.svg create mode 100644 src/assets/openLink.svg diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js new file mode 100644 index 0000000..3f48875 --- /dev/null +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -0,0 +1,25 @@ +import React from 'react' +import CopyIcon from "../../assets/copy.svg" +import DeleteIcon from "../../assets/delete.svg" +import ShareIcon from "../../assets/linkArrowLight.svg" +import logo from "../../assets/Logo.svg" +const BookmarkItem = ({thumbnail,name,url,copyLinkHandler,shareLinkHandler,deleteHandler}) => { + return ( +
+
+ +
+

{name}

+

{url}

+
+
+
+ + + +
+
+ ) +} + +export default BookmarkItem \ No newline at end of file diff --git a/src/Components/ToogleButton/ToggleButton.js b/src/Components/ToogleButton/ToggleButton.js new file mode 100644 index 0000000..3632151 --- /dev/null +++ b/src/Components/ToogleButton/ToggleButton.js @@ -0,0 +1,12 @@ +import React from "react"; + +const ToggleButton = () => { + return ( + + ) +}; + +export default ToggleButton; diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js new file mode 100644 index 0000000..5fa25c4 --- /dev/null +++ b/src/Screens/Bookmarks.js @@ -0,0 +1,71 @@ +import React, { useState } from "react"; +import BackArrow from "../assets/angleArrow.svg"; +import logo from "../assets/Logo.svg"; +import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; +import dots from "../assets/3dots.svg"; +import copy from "../assets/copySquare.svg" +import ToggleButton from "../Components/ToogleButton/ToggleButton"; +import OpenLink from "../assets/openLink.svg" + +const Bookmarks = () => { + const [showMenu,setShowMenu]=useState(false); + return ( + <> +
+ + + +
+
+
+
+ +
+

Python Automation

+

8 Bookmarks

+
+
+
+
setShowMenu(preState=>!preState)}> + +
+
+ {showMenu &&
+
    +
  • Copy Link

  • +
  • Public

  • +
  • Open in web

  • +
+
} +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + ); +}; + +export default Bookmarks; diff --git a/src/assets/3dots.svg b/src/assets/3dots.svg new file mode 100644 index 0000000..94c7bb4 --- /dev/null +++ b/src/assets/3dots.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/copySquare.svg b/src/assets/copySquare.svg new file mode 100644 index 0000000..d1e40d4 --- /dev/null +++ b/src/assets/copySquare.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/delete.svg b/src/assets/delete.svg new file mode 100644 index 0000000..afb9beb --- /dev/null +++ b/src/assets/delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/openLink.svg b/src/assets/openLink.svg new file mode 100644 index 0000000..031672f --- /dev/null +++ b/src/assets/openLink.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/popup.css b/src/popup.css index 6851a87..35ef31e 100644 --- a/src/popup.css +++ b/src/popup.css @@ -7,3 +7,20 @@ body{ background: none; color: #ffff; } +* { + scrollbar-width: thin; + } + + /* Chrome, Edge, and Safari */ + *::-webkit-scrollbar { + width: 8px; + } + + *::-webkit-scrollbar-track { + border-radius: 20px; + } + + *::-webkit-scrollbar-thumb { + background-color: #1C2940; + border-radius: 14px; + } \ No newline at end of file diff --git a/src/popup.jsx b/src/popup.jsx index dcb6d4b..31baa91 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -7,6 +7,7 @@ import Layout from "./Layout/Layout"; import Login from "./Screens/Login"; import Home from "./Screens/Home"; import NewCollection from "./Screens/NewCollection"; +import Bookmarks from "./Screens/Bookmarks"; const Popup = () => { return ( <> @@ -15,7 +16,8 @@ const Popup = () => { {/* */} {/* */} {/* */} - + {/* */} + ); From d6fd0cc18a8508141b5b075da3f9850ab42765b4 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 2 Apr 2023 14:28:05 +0530 Subject: [PATCH 027/112] Navbar update --- src/Components/Navbar/Navbar.js | 78 ++++++++++++++++++++++++++------- src/assets/avatar.svg | 55 +++++++++++++++++++++++ src/assets/command.svg | 3 ++ src/assets/help.svg | 3 ++ src/assets/logout.svg | 3 ++ 5 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 src/assets/avatar.svg create mode 100644 src/assets/command.svg create mode 100644 src/assets/help.svg create mode 100644 src/assets/logout.svg diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index f3ded96..5cd2a8a 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -1,20 +1,68 @@ -import React from 'react' -import logo from "../../assets/Logo.svg" -import linkArrow from "../../assets/linkArrow.svg" +import React, { useState } from "react"; +import logo from "../../assets/Logo.svg"; +import linkArrow from "../../assets/linkArrow.svg"; +import avatar from "../../assets/avatar.svg"; +import angalerArrow from "../../assets/angleArrow.svg"; +import command from "../../assets/command.svg"; +import openLink from "../../assets/openLink.svg" +import help from "../../assets/help.svg" +import logoout from "../../assets/logout.svg" + const Navbar = () => { + const [isLoggedIn, setIsloggedIn] = useState(true); + const [show,setShow]=useState(false); return ( -
-
- -
-
- - vist linkcollect.io - - +
+
+ +
+ {!isLoggedIn && ( + + )} + {isLoggedIn && ( + <> +

Home

+
+
+
+ +
+
setShow(preState=>!preState)}> + +
+
+ {show&&
+
+
    +
  • +

    Open in Web

    + +
  • +
  • +

    View Commands

    + +
  • +
  • +

    Help

    + +
  • +
  • +

    Logout

    + +
  • +
+
+
} +
+ + )}
- ) -} + ); +}; -export default Navbar \ No newline at end of file +export default Navbar; diff --git a/src/assets/avatar.svg b/src/assets/avatar.svg new file mode 100644 index 0000000..81e2a0f --- /dev/null +++ b/src/assets/avatar.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/command.svg b/src/assets/command.svg new file mode 100644 index 0000000..42be330 --- /dev/null +++ b/src/assets/command.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/help.svg b/src/assets/help.svg new file mode 100644 index 0000000..049540c --- /dev/null +++ b/src/assets/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/logout.svg b/src/assets/logout.svg new file mode 100644 index 0000000..b086055 --- /dev/null +++ b/src/assets/logout.svg @@ -0,0 +1,3 @@ + + + From 6e0361d0f70b00b7f30de2e591ee88f930c23b3b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 11:14:39 +0530 Subject: [PATCH 028/112] New theme setup --- tailwind.config.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tailwind.config.js b/tailwind.config.js index a9bc8e0..0ce27aa 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,7 +12,17 @@ module.exports = { blackbgOne:"#0D131D", blackbgTwo: "#141C27", darkgrey:"#202427", - lightText:"#9CA3AF" + lightText:"#9CA3AF", + + bgPrimary:"#fffff", + bgSecodary:"#f9f9f9", + bgGrey:"#f1f1f1", + primary:"#6166f1", + secodary: "#dedff1", + textPrimary:"#232438", + textSecondary:"#636472", + success:"#62b560" + } }, plugins: [], From 3d28674c7f7b63e32a412a3535f56972e584b40b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 12:08:38 +0530 Subject: [PATCH 029/112] New icons and brand logo added --- src/assets/Branding/logo_name.svg | 9 + src/assets/Branding/splash-branding.svg | 246 ++++++++++++++++++++++++ src/assets/Icons/3dot-menu.svg | 3 + src/assets/Icons/add-tab.svg | 11 ++ src/assets/Icons/add.svg | 10 + src/assets/Icons/arrow-back.svg | 3 + src/assets/Icons/arrow-share.svg | 4 + src/assets/Icons/arrow.svg | 3 + src/assets/Icons/command.svg | 3 + src/assets/Icons/copy.svg | 3 + src/assets/Icons/delete.svg | 3 + src/assets/Icons/filter--menu.svg | 3 + src/assets/Icons/help.svg | 3 + src/assets/Icons/logout.svg | 3 + src/assets/Icons/no-collection.svg | 30 +++ src/assets/Icons/openLink.svg | 3 + src/assets/Icons/upload.svg | 3 + 17 files changed, 343 insertions(+) create mode 100644 src/assets/Branding/logo_name.svg create mode 100644 src/assets/Branding/splash-branding.svg create mode 100644 src/assets/Icons/3dot-menu.svg create mode 100644 src/assets/Icons/add-tab.svg create mode 100644 src/assets/Icons/add.svg create mode 100644 src/assets/Icons/arrow-back.svg create mode 100644 src/assets/Icons/arrow-share.svg create mode 100644 src/assets/Icons/arrow.svg create mode 100644 src/assets/Icons/command.svg create mode 100644 src/assets/Icons/copy.svg create mode 100644 src/assets/Icons/delete.svg create mode 100644 src/assets/Icons/filter--menu.svg create mode 100644 src/assets/Icons/help.svg create mode 100644 src/assets/Icons/logout.svg create mode 100644 src/assets/Icons/no-collection.svg create mode 100644 src/assets/Icons/openLink.svg create mode 100644 src/assets/Icons/upload.svg diff --git a/src/assets/Branding/logo_name.svg b/src/assets/Branding/logo_name.svg new file mode 100644 index 0000000..9f3d7e2 --- /dev/null +++ b/src/assets/Branding/logo_name.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/Branding/splash-branding.svg b/src/assets/Branding/splash-branding.svg new file mode 100644 index 0000000..a00ecc1 --- /dev/null +++ b/src/assets/Branding/splash-branding.svg @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/Icons/3dot-menu.svg b/src/assets/Icons/3dot-menu.svg new file mode 100644 index 0000000..bce5ac4 --- /dev/null +++ b/src/assets/Icons/3dot-menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/add-tab.svg b/src/assets/Icons/add-tab.svg new file mode 100644 index 0000000..c93f2c3 --- /dev/null +++ b/src/assets/Icons/add-tab.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/Icons/add.svg b/src/assets/Icons/add.svg new file mode 100644 index 0000000..ea1dd97 --- /dev/null +++ b/src/assets/Icons/add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/Icons/arrow-back.svg b/src/assets/Icons/arrow-back.svg new file mode 100644 index 0000000..0cf7000 --- /dev/null +++ b/src/assets/Icons/arrow-back.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/arrow-share.svg b/src/assets/Icons/arrow-share.svg new file mode 100644 index 0000000..b2dfc82 --- /dev/null +++ b/src/assets/Icons/arrow-share.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/Icons/arrow.svg b/src/assets/Icons/arrow.svg new file mode 100644 index 0000000..60b88e8 --- /dev/null +++ b/src/assets/Icons/arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/command.svg b/src/assets/Icons/command.svg new file mode 100644 index 0000000..42be330 --- /dev/null +++ b/src/assets/Icons/command.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/copy.svg b/src/assets/Icons/copy.svg new file mode 100644 index 0000000..3ab7c36 --- /dev/null +++ b/src/assets/Icons/copy.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/delete.svg b/src/assets/Icons/delete.svg new file mode 100644 index 0000000..ffbdc1f --- /dev/null +++ b/src/assets/Icons/delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/filter--menu.svg b/src/assets/Icons/filter--menu.svg new file mode 100644 index 0000000..3c18c1e --- /dev/null +++ b/src/assets/Icons/filter--menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/help.svg b/src/assets/Icons/help.svg new file mode 100644 index 0000000..049540c --- /dev/null +++ b/src/assets/Icons/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/logout.svg b/src/assets/Icons/logout.svg new file mode 100644 index 0000000..b086055 --- /dev/null +++ b/src/assets/Icons/logout.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/no-collection.svg b/src/assets/Icons/no-collection.svg new file mode 100644 index 0000000..5a72a44 --- /dev/null +++ b/src/assets/Icons/no-collection.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/Icons/openLink.svg b/src/assets/Icons/openLink.svg new file mode 100644 index 0000000..031672f --- /dev/null +++ b/src/assets/Icons/openLink.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/Icons/upload.svg b/src/assets/Icons/upload.svg new file mode 100644 index 0000000..a03ac14 --- /dev/null +++ b/src/assets/Icons/upload.svg @@ -0,0 +1,3 @@ + + + From 5a886cf500e859c732526e1b199fb18ea1054be8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 12:48:17 +0530 Subject: [PATCH 030/112] Splash screen update --- src/Screens/Splash.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index 5f43eac..25313c1 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -1,18 +1,23 @@ import React from 'react' -import logo from "../assets/Logo.svg" +import logo from "../assets/Branding/logo_name.svg" +import splashLogo from "../assets/Branding/splash-branding.svg" + + const Splash = () => { return ( -
- -
-

More than a bookmarking tool

-

- Save from anywhere - Share to anyone - Import anyone +

+ +
+ +
+

Stay organized, save your
web links

+

+ linkcollect is the simplest way to save & share
web links from anywhere to anyone

- +
+
Powered by Linkcollect.io
+
) } From 05db3f80524d334cc1c356202cd7a6cceed76349 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 14:29:59 +0530 Subject: [PATCH 031/112] Navbar fixed --- src/Components/Navbar/Navbar.js | 69 ++++++----------------------- src/Components/SideMenu/SideMenu.js | 54 ++++++++++++++++++++++ 2 files changed, 68 insertions(+), 55 deletions(-) create mode 100644 src/Components/SideMenu/SideMenu.js diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index 5cd2a8a..abf08f4 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -1,66 +1,25 @@ import React, { useState } from "react"; -import logo from "../../assets/Logo.svg"; -import linkArrow from "../../assets/linkArrow.svg"; +import logo from "../../assets/Branding/logo2.svg"; import avatar from "../../assets/avatar.svg"; -import angalerArrow from "../../assets/angleArrow.svg"; -import command from "../../assets/command.svg"; -import openLink from "../../assets/openLink.svg" -import help from "../../assets/help.svg" -import logoout from "../../assets/logout.svg" +import SideMenu from "../SideMenu/SideMenu"; + const Navbar = () => { - const [isLoggedIn, setIsloggedIn] = useState(true); - const [show,setShow]=useState(false); + const [show, setShow] = useState(false); return ( -
+
- +
- {!isLoggedIn && ( - - )} - {isLoggedIn && ( - <> -

Home

-
-
-
- -
-
setShow(preState=>!preState)}> - -
-
- {show&&
-
-
    -
  • -

    Open in Web

    - -
  • -
  • -

    View Commands

    - -
  • -
  • -

    Help

    - -
  • -
  • -

    Logout

    - -
  • -
-
-
} + +
+
setShow(prevState=>!prevState)}> +
- - )} +
+ {show && ( + + )}
); }; diff --git a/src/Components/SideMenu/SideMenu.js b/src/Components/SideMenu/SideMenu.js new file mode 100644 index 0000000..cb2c444 --- /dev/null +++ b/src/Components/SideMenu/SideMenu.js @@ -0,0 +1,54 @@ +import React from "react"; +import command from "../../assets/Icons/command.svg"; +import openLink from "../../assets/Icons/openLink.svg"; +import help from "../../assets/Icons/help.svg"; +import logoout from "../../assets/Icons/logout.svg"; + + +const MenuItem = ({name,icon,onCLickHandler}) =>{ + return ( +
  • + +

    {name}

    +
  • + ) +} + + +const SideMenu = () => { + + const menuList = [{ + name:"Open in Web", + icon: openLink, + }, + { + name:"View Commands", + icon: command, + }, + { + name:"Help", + icon:help + }, + { + name:"Logout", + icon:logoout + } + +] + + return ( +
    +
    +
      + {menuList.map(menu=>)} +
    +
    +
    + ); +}; + + + +export default SideMenu; From 1886d03810b37ae92bb719861ee5f60f31625e9a Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 14:31:36 +0530 Subject: [PATCH 032/112] Color and new logo added --- src/assets/Branding/logo2.svg | 17 +++++++++++++++++ src/assets/Icons/command.svg | 2 +- src/assets/Icons/help.svg | 2 +- src/assets/Icons/logout.svg | 2 +- src/assets/Icons/openLink.svg | 2 +- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 src/assets/Branding/logo2.svg diff --git a/src/assets/Branding/logo2.svg b/src/assets/Branding/logo2.svg new file mode 100644 index 0000000..9d0864d --- /dev/null +++ b/src/assets/Branding/logo2.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/Icons/command.svg b/src/assets/Icons/command.svg index 42be330..0051e0f 100644 --- a/src/assets/Icons/command.svg +++ b/src/assets/Icons/command.svg @@ -1,3 +1,3 @@ - + diff --git a/src/assets/Icons/help.svg b/src/assets/Icons/help.svg index 049540c..29c8fa1 100644 --- a/src/assets/Icons/help.svg +++ b/src/assets/Icons/help.svg @@ -1,3 +1,3 @@ - + diff --git a/src/assets/Icons/logout.svg b/src/assets/Icons/logout.svg index b086055..cbd6bc0 100644 --- a/src/assets/Icons/logout.svg +++ b/src/assets/Icons/logout.svg @@ -1,3 +1,3 @@ - + diff --git a/src/assets/Icons/openLink.svg b/src/assets/Icons/openLink.svg index 031672f..ffaf4a6 100644 --- a/src/assets/Icons/openLink.svg +++ b/src/assets/Icons/openLink.svg @@ -1,3 +1,3 @@ - + From 89f9b860a88bb0c4a6c7b3e1cef2c7f1717b72aa Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 14:58:53 +0530 Subject: [PATCH 033/112] Layout update --- src/Layout/Layout.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Layout/Layout.js b/src/Layout/Layout.js index d79d520..8a815b8 100644 --- a/src/Layout/Layout.js +++ b/src/Layout/Layout.js @@ -2,9 +2,10 @@ import React from "react"; import Navbar from "../Components/Navbar/Navbar"; const Layout = ({ children }) => { return ( -
    +
    {children} +
    Powered by Linkcollect.io
    ); }; From 60925875aad180637ea3aa5aca5a5ca02050e473 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 14:59:07 +0530 Subject: [PATCH 034/112] Genral footer added --- src/Screens/Splash.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index 25313c1..25e901a 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -16,7 +16,6 @@ const Splash = () => {

    -
    Powered by Linkcollect.io
    ) From ac7c3a3252b411f59291d453da1feb3b004fbb37 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 16:03:36 +0530 Subject: [PATCH 035/112] Home Page Work Done --- .../CollectiionItem/CollectionItem.js | 18 ++++---- src/Components/SearchBox/SearchBox.js | 44 ++++++++++++++++++ src/Screens/Home.js | 45 +++++++++++++++---- 3 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 src/Components/SearchBox/SearchBox.js diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index a050b42..e8e6ae4 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -1,22 +1,22 @@ import React from 'react' import logo from "../../assets/Logo.svg" -import CopyIcon from "../../assets/copy.svg" +import CopyIcon from "../../assets/Icons/copy.svg" import AddIcon from "../../assets/add.svg" -import ShareIcon from "../../assets/linkArrowLight.svg" +import ShareIcon from "../../assets/Icons/arrow-share.svg" const CollectionItem = ({thumbnail,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { return ( -
    +
    -
    -

    {name}

    -

    {count}{" "}Bookmarks

    +
    +

    {name}

    +

    {count}{" "}Bookmarks

    - - - + + +
    ) diff --git a/src/Components/SearchBox/SearchBox.js b/src/Components/SearchBox/SearchBox.js new file mode 100644 index 0000000..fbccc3c --- /dev/null +++ b/src/Components/SearchBox/SearchBox.js @@ -0,0 +1,44 @@ +import React from "react"; +import filterMenu from "../../assets/Icons/filter--menu.svg" +const SearchBox = ({onChnageHandler}) => { + return ( +
    + +
    +
    + +
    + +
    + +
    + ); +}; + +export default SearchBox; diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 083a06f..c2d2c49 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,13 +1,42 @@ -import React from 'react' -import addIcon from '../assets/add.svg' -import ArrowIcon from "../assets/linkArrowLight.svg" +import React, { useState } from 'react' +import addIcon from '../assets/Icons/add-tab.svg' import CollectionItem from '../Components/CollectiionItem/CollectionItem' +import noCollectionItem from "../assets/Icons/no-collection.svg" +import SearchBox from '../Components/SearchBox/SearchBox' + +const EmptyCollections = () =>{ + return ( +
    + + +
    + +

    No collection Found!

    +
    +
    + ) +} + + const Home = () => { + const [empty,setEmpty] = useState(false); + + + if(empty){ + return + } + + + return ( -
    +
    +
    + +
    +
    -

    Collection list8

    - +

    Collections8

    +
    @@ -15,9 +44,7 @@ const Home = () => {
    - +
    ) } From 03c314c1274274fe6835d1c9ab941c8fca89f1b6 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 16:03:46 +0530 Subject: [PATCH 036/112] Navbar Redesign --- src/Components/Navbar/Navbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index abf08f4..babd1d0 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -7,7 +7,7 @@ import SideMenu from "../SideMenu/SideMenu"; const Navbar = () => { const [show, setShow] = useState(false); return ( -
    +
    From 908d61aa816bc4ad522d657dd92041ad702939fd Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 16:50:50 +0530 Subject: [PATCH 037/112] New Collection done --- src/Components/Input/Input.js | 50 +++++++++++++++++++++------ src/Screens/NewCollection.js | 64 +++++++++++++++++++---------------- 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js index ecd4340..a1c0b16 100644 --- a/src/Components/Input/Input.js +++ b/src/Components/Input/Input.js @@ -1,22 +1,29 @@ import React from "react"; const classMapper = { - fileClass : `block w-full text-sm text-slate-500 bg-blackbgOne border border-lightText rounded-md py-2 px-3 - file:mr-4 file:py-0 file:px-4 - file:rounded-full file:border-0 - file:text-[12px] file:font-light - file:bg-blackbgTwo file:text-lightText + fileClass: `block w-full text-sm text-textPrimary bg-bgSecodary border border-bgGrey rounded-md py-2 px-3 + file:mr-4 file:py-0 file:px-4 file:py-1 + file:rounded-md file:border-0 + file:text-[16px] file:font-light + file:bg-secodary file:text-primary hover:file:bg-violet-100 file:cursor-pointer `, - textClass : "mt-1 px-3 py-2 bg-blackbgOne border border-lightText placeholder-lightText focus:outline-none block w-full rounded-md sm:text-sm" -} - + textClass: + "mt-1 px-3 py-2 bg-bgSecodary border border-bgGrey placeholder-textPrimary focus:outline-none block w-full rounded-md sm:text-sm", +}; -const Input = ({name,type,label,placeholder,onInputHandler,inputClass}) => { +const Input = ({ + name, + type, + label, + placeholder, + onInputHandler, + inputClass, +}) => { return ( ); }; +export const Select = ({ options }) => { + return ( + <> + + + + ); +}; + export default Input; diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index 657095a..e19c4a2 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -1,39 +1,45 @@ import React from "react"; -import Input from "../Components/Input/Input"; -import BackArrow from "../assets/angleArrow.svg" +import Input, {Select} from "../Components/Input/Input"; +import BackArrow from "../assets/Icons/arrow.svg"; const NewCollection = () => { - const onInput = (e)=>{ - console.log(e.target.value) - } - const onInputFile = (e)=>{ - console.log(e.target.value) - } + const onInput = (e) => { + console.log(e.target.value); + }; + const onInputFile = (e) => { + console.log(e.target.value); + }; return ( <> -
    - -
    -
    -
    - - - + {/* Need to create a shadow warppr later */} + +
    +
    + + + +
    -
    ); }; From a4cebc37faea473b0b2e3739f8d0f961e08836be Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 16:51:06 +0530 Subject: [PATCH 038/112] Home navbar update --- src/Components/Navbar/Navbar.js | 2 +- src/Screens/Home.js | 84 ++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 40 deletions(-) diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index babd1d0..ed746dc 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -7,7 +7,7 @@ import SideMenu from "../SideMenu/SideMenu"; const Navbar = () => { const [show, setShow] = useState(false); return ( -
    +
    diff --git a/src/Screens/Home.js b/src/Screens/Home.js index c2d2c49..ee32910 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,52 +1,58 @@ -import React, { useState } from 'react' -import addIcon from '../assets/Icons/add-tab.svg' -import CollectionItem from '../Components/CollectiionItem/CollectionItem' -import noCollectionItem from "../assets/Icons/no-collection.svg" -import SearchBox from '../Components/SearchBox/SearchBox' +import React, { useState } from "react"; +import addIcon from "../assets/Icons/add-tab.svg"; +import CollectionItem from "../Components/CollectiionItem/CollectionItem"; +import noCollectionItem from "../assets/Icons/no-collection.svg"; +import SearchBox from "../Components/SearchBox/SearchBox"; -const EmptyCollections = () =>{ - return ( -
    - - -
    - -

    No collection Found!

    +const EmptyCollections = () => { + return ( +
    + +
    + +

    + No collection Found! +

    +
    -
    - ) -} - + ); +}; const Home = () => { - const [empty,setEmpty] = useState(false); + const [empty, setEmpty] = useState(false); - - if(empty){ - return + if (empty) { + return ; } - - return (
    -
    - -
    -
    -
    -

    Collections8

    - +
    + +
    +
    +
    +

    + Collections + 8 +

    +
    -
    - - - - +
    + + + +
    +
    -
    - ) -} + ); +}; -export default Home \ No newline at end of file +export default Home; From 9313c87099e96c21cad271f87d72f1f66bda7fda Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 17:23:21 +0530 Subject: [PATCH 039/112] Bookmarks redesigned --- src/Components/BookmarkItem/BookmarkItem.js | 18 ++++----- src/Components/Menu/PopupMenu.js | 17 ++++++++ src/Components/{SideMenu => Menu}/SideMenu.js | 0 src/Components/ToogleButton/ToggleButton.js | 2 +- src/Screens/Bookmarks.js | 39 +++++++++---------- 5 files changed, 45 insertions(+), 31 deletions(-) create mode 100644 src/Components/Menu/PopupMenu.js rename src/Components/{SideMenu => Menu}/SideMenu.js (100%) diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js index 3f48875..6b05f98 100644 --- a/src/Components/BookmarkItem/BookmarkItem.js +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -1,22 +1,22 @@ import React from 'react' -import CopyIcon from "../../assets/copy.svg" -import DeleteIcon from "../../assets/delete.svg" -import ShareIcon from "../../assets/linkArrowLight.svg" +import CopyIcon from "../../assets/Icons/copyLight.svg" +import DeleteIcon from "../../assets/Icons/delete.svg" +import ShareIcon from "../../assets/Icons/arrow-share.svg" import logo from "../../assets/Logo.svg" const BookmarkItem = ({thumbnail,name,url,copyLinkHandler,shareLinkHandler,deleteHandler}) => { return ( -
    +
    -

    {name}

    -

    {url}

    +

    {name}

    +

    {url}

    - - - + + +
    ) diff --git a/src/Components/Menu/PopupMenu.js b/src/Components/Menu/PopupMenu.js new file mode 100644 index 0000000..c748ebc --- /dev/null +++ b/src/Components/Menu/PopupMenu.js @@ -0,0 +1,17 @@ +import React from 'react' +import ToggleButton from '../ToogleButton/ToggleButton' +import copy from "../../assets/Icons/copy.svg" +import OpenLink from "../../assets/Icons/openLink.svg" +const PopupMenu = () => { + return ( +
    +
      +
    • Copy Link

    • +
    • Public

    • +
    • Open in web

    • +
    +
    + ) +} + +export default PopupMenu \ No newline at end of file diff --git a/src/Components/SideMenu/SideMenu.js b/src/Components/Menu/SideMenu.js similarity index 100% rename from src/Components/SideMenu/SideMenu.js rename to src/Components/Menu/SideMenu.js diff --git a/src/Components/ToogleButton/ToggleButton.js b/src/Components/ToogleButton/ToggleButton.js index 3632151..9aebba8 100644 --- a/src/Components/ToogleButton/ToggleButton.js +++ b/src/Components/ToogleButton/ToggleButton.js @@ -4,7 +4,7 @@ const ToggleButton = () => { return ( ) }; diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 5fa25c4..eb199ae 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -1,46 +1,43 @@ import React, { useState } from "react"; -import BackArrow from "../assets/angleArrow.svg"; +import BackArrow from "../assets/Icons/arrow.svg"; import logo from "../assets/Logo.svg"; import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; -import dots from "../assets/3dots.svg"; -import copy from "../assets/copySquare.svg" -import ToggleButton from "../Components/ToogleButton/ToggleButton"; -import OpenLink from "../assets/openLink.svg" +import dots from "../assets/Icons/3dot-menu.svg"; +import PopupMenu from "../Components/Menu/PopupMenu"; const Bookmarks = () => { const [showMenu,setShowMenu]=useState(false); return ( <> -
    - - + -
    -
    +
    + {/* Collection Heading */} +
    +
    +
    -

    Python Automation

    -

    8 Bookmarks

    +

    Python Automation

    +

    8 Bookmarks

    setShowMenu(preState=>!preState)}>
    -
    - {showMenu &&
    -
      -
    • Copy Link

    • -
    • Public

    • -
    • Open in web

    • -
    -
    } +
    + {showMenu && }
    -
    + + {/* Collection list */} +
    From 67d2b1e75911d44e419c0792d53c2e363647512d Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 17:24:08 +0530 Subject: [PATCH 040/112] Path Fix --- src/Components/CollectiionItem/CollectionItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index e8e6ae4..7014350 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -1,7 +1,7 @@ import React from 'react' import logo from "../../assets/Logo.svg" import CopyIcon from "../../assets/Icons/copy.svg" -import AddIcon from "../../assets/add.svg" +import AddIcon from "../../assets/Icons/add.svg" import ShareIcon from "../../assets/Icons/arrow-share.svg" const CollectionItem = ({thumbnail,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { return ( From f5f5986d2db50b520adb5ade4b136898fc1b9531 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 17:25:07 +0530 Subject: [PATCH 041/112] Old theme and icon deleted --- src/Components/Navbar/Navbar.js | 2 +- src/assets/3dots.svg | 3 --- src/assets/Icons/copyLight.svg | 3 +++ src/assets/add.svg | 3 --- src/assets/angleArrow.svg | 3 --- src/assets/command.svg | 3 --- src/assets/copy.svg | 3 --- src/assets/copySquare.svg | 3 --- src/assets/delete.svg | 3 --- src/assets/help.svg | 3 --- src/assets/linkArrow.svg | 3 --- src/assets/linkArrowLight.svg | 3 --- src/assets/logout.svg | 3 --- src/assets/openLink.svg | 3 --- src/popup.css | 4 ++-- src/popup.jsx | 2 +- tailwind.config.js | 11 ++--------- 17 files changed, 9 insertions(+), 49 deletions(-) delete mode 100644 src/assets/3dots.svg create mode 100644 src/assets/Icons/copyLight.svg delete mode 100644 src/assets/add.svg delete mode 100644 src/assets/angleArrow.svg delete mode 100644 src/assets/command.svg delete mode 100644 src/assets/copy.svg delete mode 100644 src/assets/copySquare.svg delete mode 100644 src/assets/delete.svg delete mode 100644 src/assets/help.svg delete mode 100644 src/assets/linkArrow.svg delete mode 100644 src/assets/linkArrowLight.svg delete mode 100644 src/assets/logout.svg delete mode 100644 src/assets/openLink.svg diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index ed746dc..9b9b380 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -1,7 +1,7 @@ import React, { useState } from "react"; import logo from "../../assets/Branding/logo2.svg"; import avatar from "../../assets/avatar.svg"; -import SideMenu from "../SideMenu/SideMenu"; +import SideMenu from "../Menu/SideMenu"; const Navbar = () => { diff --git a/src/assets/3dots.svg b/src/assets/3dots.svg deleted file mode 100644 index 94c7bb4..0000000 --- a/src/assets/3dots.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/Icons/copyLight.svg b/src/assets/Icons/copyLight.svg new file mode 100644 index 0000000..974a7c8 --- /dev/null +++ b/src/assets/Icons/copyLight.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/add.svg b/src/assets/add.svg deleted file mode 100644 index 123aa18..0000000 --- a/src/assets/add.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/angleArrow.svg b/src/assets/angleArrow.svg deleted file mode 100644 index 27df890..0000000 --- a/src/assets/angleArrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/command.svg b/src/assets/command.svg deleted file mode 100644 index 42be330..0000000 --- a/src/assets/command.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/copy.svg b/src/assets/copy.svg deleted file mode 100644 index 7434168..0000000 --- a/src/assets/copy.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/copySquare.svg b/src/assets/copySquare.svg deleted file mode 100644 index d1e40d4..0000000 --- a/src/assets/copySquare.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/delete.svg b/src/assets/delete.svg deleted file mode 100644 index afb9beb..0000000 --- a/src/assets/delete.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/help.svg b/src/assets/help.svg deleted file mode 100644 index 049540c..0000000 --- a/src/assets/help.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/linkArrow.svg b/src/assets/linkArrow.svg deleted file mode 100644 index 5d3d1f7..0000000 --- a/src/assets/linkArrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/linkArrowLight.svg b/src/assets/linkArrowLight.svg deleted file mode 100644 index 4818fd3..0000000 --- a/src/assets/linkArrowLight.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/logout.svg b/src/assets/logout.svg deleted file mode 100644 index b086055..0000000 --- a/src/assets/logout.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/openLink.svg b/src/assets/openLink.svg deleted file mode 100644 index 031672f..0000000 --- a/src/assets/openLink.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/popup.css b/src/popup.css index 35ef31e..341ab0f 100644 --- a/src/popup.css +++ b/src/popup.css @@ -13,7 +13,7 @@ body{ /* Chrome, Edge, and Safari */ *::-webkit-scrollbar { - width: 8px; + width: 4px; } *::-webkit-scrollbar-track { @@ -21,6 +21,6 @@ body{ } *::-webkit-scrollbar-thumb { - background-color: #1C2940; + background-color: #6166f1; border-radius: 14px; } \ No newline at end of file diff --git a/src/popup.jsx b/src/popup.jsx index 31baa91..da35bf0 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -12,8 +12,8 @@ const Popup = () => { return ( <> - {/* */} + {/* */} {/* */} {/* */} diff --git a/tailwind.config.js b/tailwind.config.js index 0ce27aa..c016e44 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -6,21 +6,14 @@ module.exports = { theme: { extend: {}, colors:{ - primary:"#2B5ACD", - blackbg : "#151515", - lightblackbg: "#101521", - blackbgOne:"#0D131D", - blackbgTwo: "#141C27", - darkgrey:"#202427", - lightText:"#9CA3AF", - - bgPrimary:"#fffff", + bgPrimary:"#fff", bgSecodary:"#f9f9f9", bgGrey:"#f1f1f1", primary:"#6166f1", secodary: "#dedff1", textPrimary:"#232438", textSecondary:"#636472", + textLight:"#f6f6f6", success:"#62b560" } From 6b61679684e8c40ca9c1a2dfff9600b27b785575 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 19:45:59 +0530 Subject: [PATCH 042/112] Side menu style uapdated and logo added --- src/Components/Menu/SideMenu.js | 3 ++- src/assets/Branding/Logo3.svg | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 src/assets/Branding/Logo3.svg diff --git a/src/Components/Menu/SideMenu.js b/src/Components/Menu/SideMenu.js index cb2c444..a8d6907 100644 --- a/src/Components/Menu/SideMenu.js +++ b/src/Components/Menu/SideMenu.js @@ -39,7 +39,8 @@ const SideMenu = () => { ] return ( -
    +
    +
      {menuList.map(menu=>)} diff --git a/src/assets/Branding/Logo3.svg b/src/assets/Branding/Logo3.svg new file mode 100644 index 0000000..0ab16cc --- /dev/null +++ b/src/assets/Branding/Logo3.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 8b6960144bda68ae3436e2f8c287afbdffa662f1 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 7 Apr 2023 20:16:11 +0530 Subject: [PATCH 043/112] Logout screen removed --- src/Screens/Login.js | 15 --------------- src/popup.jsx | 3 --- 2 files changed, 18 deletions(-) delete mode 100644 src/Screens/Login.js diff --git a/src/Screens/Login.js b/src/Screens/Login.js deleted file mode 100644 index f44bba2..0000000 --- a/src/Screens/Login.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import logo from "../assets/Logo.svg" -const Login = () => { - return ( -
      - -
      - - -
      -
      - ) -} - -export default Login \ No newline at end of file diff --git a/src/popup.jsx b/src/popup.jsx index da35bf0..09f4210 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -4,7 +4,6 @@ import { createRoot } from "react-dom/client"; import "./popup.css"; import Splash from "./Screens/Splash"; import Layout from "./Layout/Layout"; -import Login from "./Screens/Login"; import Home from "./Screens/Home"; import NewCollection from "./Screens/NewCollection"; import Bookmarks from "./Screens/Bookmarks"; @@ -13,8 +12,6 @@ const Popup = () => { <> {/* */} - - {/* */} {/* */} {/* */} From 73005a437af8dfb5d042a28f7cd07c3d11836907 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 8 Apr 2023 22:58:20 +0530 Subject: [PATCH 044/112] Api config added --- src/api/apiConfig.json | 3 +++ src/api/authService.js | 44 ++++++++++++++++++++++++++++++++++++ src/api/collectionService.js | 34 ++++++++++++++++++++++++++++ src/api/httpService.js | 29 ++++++++++++++++++++++++ src/api/timelineService.js | 19 ++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 src/api/apiConfig.json create mode 100644 src/api/authService.js create mode 100644 src/api/collectionService.js create mode 100644 src/api/httpService.js create mode 100644 src/api/timelineService.js diff --git a/src/api/apiConfig.json b/src/api/apiConfig.json new file mode 100644 index 0000000..a5b3d45 --- /dev/null +++ b/src/api/apiConfig.json @@ -0,0 +1,3 @@ +{ + "baseUrl": "http://localhost:7000/api/v1" +} diff --git a/src/api/authService.js b/src/api/authService.js new file mode 100644 index 0000000..dc687f0 --- /dev/null +++ b/src/api/authService.js @@ -0,0 +1,44 @@ +import http from "./httpService"; +import queryString from "query-string"; +import api from "./apiConfig.json"; + +const apiEndpoint = api.baseUrl + "/user"; + +export function register(name, email, password) { + return http.post(`${apiEndpoint}/signup`, { + name, + email, + password, + }); +} + +export function login(email, password) { + return http.post(`${apiEndpoint}/signin`, { + email, + password, + }); +} + +export function getUserById(userId) { + return http.get(`${apiEndpoint}/get-user/${userId}`); +} + +// For logout just nullify token in loaclstorage (token=null) + +// Common for Google sign in and Sign up and this generates a link +export function googleAuth() { + const query = queryString.stringify({ + client_id: + "842762588000-kh4ksf014o6upmdklc1tukus5d4gi5ch.apps.googleusercontent.com", + redirect_uri: "http://localhost:7000/api/v1/user/google-auth", // Changes on production + scope: [ + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile", + ].join(" "), // space seperated string + response_type: "code", + access_type: "offline", + prompt: "consent", + }); + + return `https://accounts.google.com/o/oauth2/v2/auth?${query}`; +} diff --git a/src/api/collectionService.js b/src/api/collectionService.js new file mode 100644 index 0000000..d32f635 --- /dev/null +++ b/src/api/collectionService.js @@ -0,0 +1,34 @@ +import http from "./httpService"; +import api from "./apiConfig.json"; + +const apiEndpoint = api.baseUrl + "/collections"; + +const boundary = "---------------------------" + Date.now().toString(16); + +// With Timelines +export function getAllCollections() { + return http.get(`${apiEndpoint}/`); +} + +// With Timelines +export function getCollection(collectionId) { + return http.get(`${apiEndpoint}/${collectionId}`); +} + +export function createCollection(collectionData) { + return http.post(`${apiEndpoint}`, collectionData); +} + +export function updateCollection(collectionId, collectionData) { + return http.patch(`${apiEndpoint}/${collectionId}`, collectionData); +} + +export function deleteCollection(collectionId) { + return http.delete(`${apiEndpoint}/${collectionId}`); +} + +// Special API call +// Without timelines +export function getAllCollectionsWithoutTimelines() { + return http.get(`${apiEndpoint}/without-timelines`); +} diff --git a/src/api/httpService.js b/src/api/httpService.js new file mode 100644 index 0000000..55bb372 --- /dev/null +++ b/src/api/httpService.js @@ -0,0 +1,29 @@ +import axios from "axios"; + +// For server internal error handling status-code(500) +axios.interceptors.response.use(null, (error) => { + const expectedError = + error.response && + error.response.status >= 400 && + error.response.status < 500; + + if (!expectedError) { + console.log("An unexpected error occured"); + } + + return Promise.reject(error); +}); + +// ----------- Setting JWT token on every request ------------ // +export function setJwtInRequestHeader(jwt) { + axios.defaults.headers.common["Authorization"] = `Bearer ${jwt}`; +} + +// Please use http.get,post....instead of using axios everywhere +export default { + get: axios.get, + post: axios.post, + put: axios.put, + patch: axios.patch, + delete: axios.delete, +}; diff --git a/src/api/timelineService.js b/src/api/timelineService.js new file mode 100644 index 0000000..cbe1ab3 --- /dev/null +++ b/src/api/timelineService.js @@ -0,0 +1,19 @@ +import http from "./httpService"; +import api from "./apiConfig.json"; + +const apiEndpoint = api.baseUrl + "/collections"; + +export function createTimeline(collectionId, timeline) { + return http.post(`${apiEndpoint}/${collectionId}/timelines`, timeline); +} + +export function updateTimeline(collectionId, timelineId, timeline) { + return http.patch( + `${apiEndpoint}/${collectionId}/timelines/${timelineId}`, + timeline + ); +} + +export function deleteTimeline(collectionId, timelineId) { + return http.delete(`${apiEndpoint}/${collectionId}/timelines/${timelineId}`); +} From 212bd6d4cb07861d7707bfa7dad26975180754d3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 8 Apr 2023 22:58:37 +0530 Subject: [PATCH 045/112] web pack update --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index f7aba43..15359b4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,7 +7,7 @@ module.exports = { entry: { popup: "./src/popup.jsx", background: "./src/background/background.js", - contentScript: "./src/background/background.js", + contentScript: "./src/contenScript/contentScript.js", }, output: { path: path.resolve(__dirname, "dist"), From 4100f1b5955253e16c64f2d74996d7d98dadee59 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 8 Apr 2023 23:00:49 +0530 Subject: [PATCH 046/112] website auth added --- src/Layout/Layout.js | 4 +- src/Screens/Splash.js | 23 +++++++- src/actions/authActions.js | 12 ++++ src/background/background.js | 20 +++++++ src/constants/authConstants.js | 3 + src/contenScript/contentScript.js | 12 ++++ src/popup.jsx | 96 ++++++++++++++++++++++++++----- src/reducers/authReducers.js | 34 +++++++++++ src/reducers/index.js | 10 ++++ 9 files changed, 195 insertions(+), 19 deletions(-) create mode 100644 src/actions/authActions.js create mode 100644 src/constants/authConstants.js create mode 100644 src/reducers/authReducers.js create mode 100644 src/reducers/index.js diff --git a/src/Layout/Layout.js b/src/Layout/Layout.js index 8a815b8..979a9a5 100644 --- a/src/Layout/Layout.js +++ b/src/Layout/Layout.js @@ -1,9 +1,9 @@ import React from "react"; import Navbar from "../Components/Navbar/Navbar"; -const Layout = ({ children }) => { +const Layout = ({ token, children }) => { return (
      - + {token && } {children}
      Powered by Linkcollect.io
      diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index 25e901a..9936a32 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -1,9 +1,26 @@ -import React from 'react' +import React, { useEffect } from 'react' import logo from "../assets/Branding/logo_name.svg" import splashLogo from "../assets/Branding/splash-branding.svg" const Splash = () => { + + const startLoginHanlder = () =>{ + chrome.storage.local.get(["token"],(result)=>{ + console.log() + if(result.token!=undefined){ + //update the state and redirect to the home + + }else{ + chrome.tabs.create({ + url:"http://localhost:3000/" + }) + } + }); + + } + + return (
      @@ -14,7 +31,9 @@ const Splash = () => {

      linkcollect is the simplest way to save & share
      web links from anywhere to anyone

      - +
      + +
    diff --git a/src/actions/authActions.js b/src/actions/authActions.js new file mode 100644 index 0000000..05a18d2 --- /dev/null +++ b/src/actions/authActions.js @@ -0,0 +1,12 @@ +import { AUTH_SUCCESS , AUTH_START , AUTH_FAILURE } from "../constants/authConstants" +export const authStart = () =>({ + type:AUTH_START, +}) +export const authSuccess = (data) => ({ + type:AUTH_SUCCESS, + data +}) + +export const authFailure = (error) => ({ + type: AUTH_FAILURE +}) \ No newline at end of file diff --git a/src/background/background.js b/src/background/background.js index e69de29..9a2064a 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -0,0 +1,20 @@ +chrome.tabs.onUpdated.addListener((tabId, _, tab) => { + chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { + const activeTab=tabs[0]; + console.log(activeTab) + if(activeTab?.url==="http://localhost:3000/"){ + console.log("back message") + chrome.tabs.sendMessage(tabId,{ + message:"LOGIN_SUCCESS" + }) + } +})}) + +chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + if (request.method == "getStatus"){ + console.log("hello") + sendResponse({status: localStorage['token']}); + } + else + sendResponse({}); // snub them. +}); \ No newline at end of file diff --git a/src/constants/authConstants.js b/src/constants/authConstants.js new file mode 100644 index 0000000..fa420fe --- /dev/null +++ b/src/constants/authConstants.js @@ -0,0 +1,3 @@ +export const AUTH_START = "AUTH_START" +export const AUTH_SUCCESS = "AUTH_SUCCESS" +export const AUTH_FAILURE = "AUTH_FAILURE" \ No newline at end of file diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index e69de29..297f04f 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -0,0 +1,12 @@ + +chrome.runtime.onMessage.addListener((request)=>{ + if(request.message === "LOGIN_SUCCESS"){ + token=localStorage.getItem("token") + if(token){ + chrome.storage.local.set({"token":token}); + } + } +}) + +console.log("Hello") + diff --git a/src/popup.jsx b/src/popup.jsx index 09f4210..81b4216 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -1,30 +1,96 @@ -import React from "react"; -import { StrictMode } from "react"; +/*global chrome*/ +import React, { useEffect } from "react"; +import { StrictMode, useState } from "react"; import { createRoot } from "react-dom/client"; import "./popup.css"; -import Splash from "./Screens/Splash"; import Layout from "./Layout/Layout"; +import Splash from "./Screens/Splash"; import Home from "./Screens/Home"; import NewCollection from "./Screens/NewCollection"; import Bookmarks from "./Screens/Bookmarks"; +import { HashRouter, Routes, Route, Navigate } from "react-router-dom"; +import { useDispatch, useSelector } from "react-redux"; +import reducers from "./reducers"; +import {Provider} from "react-redux"; +import { authFailure, authStart, authSuccess } from "./actions/authActions"; +import { createStore } from "redux"; +import { setJwtInRequestHeader } from "./api/httpService"; +import {getUserById} from "./api/authService" +import jwt from "jsonwebtoken" + + + const Popup = () => { + const dispatch = useDispatch(); + const authState = useSelector(state=>state.auth) + console.log(authState); + useEffect(()=>{ + chrome.storage.local.get(['token'],async (res)=>{ + dispatch(authStart()) + console.log("hello",res.token) + // const {user: userId} = jwt.decode(res.token); + // const user = await getUserById() + dispatch(authSuccess(res.token)) + }) + },[]) + + useEffect(() => { + function init() { + if (authState.token) { + console.log(authState.token) + // setJwtInRequestHeader(authtoken); + } + } + + init(); + }, [authState.token]); + + + + + + if(authState.loading){ + return "Loading.." + } + return ( <> - - {/* */} - {/* */} - {/* */} - + + + + ) : ( + + ) + } + /> + {authState.token && ( + <> + } /> + } /> + } /> + + )} + ); }; -const rootElement = document.getElementById("linkcollect-target"); -const root = createRoot(rootElement); + const store = createStore(reducers) + const rootElement = document.getElementById("linkcollect-target"); + const root = createRoot(rootElement); + root.render( + + + + + + + + ); + -root.render( - - - -); diff --git a/src/reducers/authReducers.js b/src/reducers/authReducers.js new file mode 100644 index 0000000..6faeba8 --- /dev/null +++ b/src/reducers/authReducers.js @@ -0,0 +1,34 @@ +import { AUTH_SUCCESS, AUTH_START, AUTH_FAILURE } from "../constants/authConstants"; +const initilaState = { + token:"", + user:{}, + loading:false, + error:false +} +const authReducer = (state=initilaState,action) => { + const {type,data} = action; + switch(type) { + case AUTH_START : + return { + ...state, + loading:true, + error:false + } + case AUTH_SUCCESS : + return { + ...state, + token:data, + loading:false, + } + case AUTH_FAILURE : + return { + ...state, + loading:false, + error:true + } + default: + return state + } +} + +export default authReducer \ No newline at end of file diff --git a/src/reducers/index.js b/src/reducers/index.js new file mode 100644 index 0000000..9003532 --- /dev/null +++ b/src/reducers/index.js @@ -0,0 +1,10 @@ +import { combineReducers } from "redux"; +import authReducers from "./authReducers" + +const reducers = combineReducers({ + auth:authReducers +}); + + + +export default reducers; \ No newline at end of file From 117644396ab5c0e919f5ff29435a9474a20c6039 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 8 Apr 2023 23:35:58 +0530 Subject: [PATCH 047/112] navigator for new collection added --- src/Screens/Home.js | 29 +++++++++++++++++++++++------ src/Screens/NewCollection.js | 12 ++++++++++-- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index ee32910..304d7cd 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,13 +1,16 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import addIcon from "../assets/Icons/add-tab.svg"; import CollectionItem from "../Components/CollectiionItem/CollectionItem"; import noCollectionItem from "../assets/Icons/no-collection.svg"; import SearchBox from "../Components/SearchBox/SearchBox"; +import { useSelector } from "react-redux"; +import { useNavigate } from "react-router-dom"; +// import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; -const EmptyCollections = () => { +const EmptyCollections = ({navigator}) => { return (
    - @@ -23,9 +26,23 @@ const EmptyCollections = () => { const Home = () => { const [empty, setEmpty] = useState(false); + const [collections,SetCollections] = useState([]); + const auth = useSelector(state=>state.auth); + const navigate = useNavigate(); + const createCollectionRedicector = () => { + navigate("/new-collection"); + } - if (empty) { - return ; + useEffect(()=>{ + if(!auth.token){ + return navigate("/") + } + // const getCollections = async () =>{ + // const data = await getAllCollectionsWithoutTimelines() + // } + },[]) + if (collections.length===0) { + return ; } return ( @@ -39,7 +56,7 @@ const Home = () => { Collections 8

    - diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index e19c4a2..c7e9f04 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -1,22 +1,30 @@ import React from "react"; import Input, {Select} from "../Components/Input/Input"; import BackArrow from "../assets/Icons/arrow.svg"; +import { useNavigate } from "react-router-dom"; const NewCollection = () => { + const navigate = useNavigate(); const onInput = (e) => { console.log(e.target.value); }; const onInputFile = (e) => { console.log(e.target.value); }; + + const backButtonHnadler = (e) => { + e.preventDefault(); + navigate(-1); + } + return ( <> {/* Need to create a shadow warppr later */}
    From fa8bbb0339c42c1b49f5c809488182a4f62063ba Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 9 Apr 2023 01:05:33 +0530 Subject: [PATCH 048/112] Logout added --- src/Components/Menu/SideMenu.js | 15 +++++++++------ src/Components/Navbar/Navbar.js | 15 ++++++++++++++- src/actions/authActions.js | 6 +++++- src/constants/authConstants.js | 3 ++- src/reducers/authReducers.js | 4 +++- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/Components/Menu/SideMenu.js b/src/Components/Menu/SideMenu.js index a8d6907..ac0be18 100644 --- a/src/Components/Menu/SideMenu.js +++ b/src/Components/Menu/SideMenu.js @@ -6,18 +6,20 @@ import logoout from "../../assets/Icons/logout.svg"; const MenuItem = ({name,icon,onCLickHandler}) =>{ + console.log(onCLickHandler) return (
  • -

    {name}

    +
  • ) } -const SideMenu = () => { +const SideMenu = ({onLogout}) => { + const menuList = [{ name:"Open in Web", @@ -33,9 +35,10 @@ const SideMenu = () => { }, { name:"Logout", - icon:logoout + icon:logoout, + onCLickHandler:onLogout } - + ] return ( @@ -43,7 +46,7 @@ const SideMenu = () => {
      - {menuList.map(menu=>)} + {menuList.map(menu=>)}
    diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index 9b9b380..5e55edf 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -2,10 +2,23 @@ import React, { useState } from "react"; import logo from "../../assets/Branding/logo2.svg"; import avatar from "../../assets/avatar.svg"; import SideMenu from "../Menu/SideMenu"; +import { useDispatch } from "react-redux"; +import { authLogout } from "../../actions/authActions"; +import { useNavigate } from "react-router-dom"; const Navbar = () => { const [show, setShow] = useState(false); + const dispatch = useDispatch(); + const navigate = useNavigate(); + const logoutHandler = (e) =>{ + e.preventDefault(); + console.log("log") + chrome.storage.local.remove(['token'],()=>{ + dispatch(authLogout()); + navigate("/") + }) + } return (
    @@ -18,7 +31,7 @@ const Navbar = () => {
    {show && ( - + )}
    ); diff --git a/src/actions/authActions.js b/src/actions/authActions.js index 05a18d2..5473527 100644 --- a/src/actions/authActions.js +++ b/src/actions/authActions.js @@ -1,4 +1,4 @@ -import { AUTH_SUCCESS , AUTH_START , AUTH_FAILURE } from "../constants/authConstants" +import { AUTH_SUCCESS , AUTH_START , AUTH_FAILURE, AUTH_LOGOUT } from "../constants/authConstants" export const authStart = () =>({ type:AUTH_START, }) @@ -9,4 +9,8 @@ export const authSuccess = (data) => ({ export const authFailure = (error) => ({ type: AUTH_FAILURE +}) + +export const authLogout = () =>({ + type: AUTH_LOGOUT }) \ No newline at end of file diff --git a/src/constants/authConstants.js b/src/constants/authConstants.js index fa420fe..d729156 100644 --- a/src/constants/authConstants.js +++ b/src/constants/authConstants.js @@ -1,3 +1,4 @@ export const AUTH_START = "AUTH_START" export const AUTH_SUCCESS = "AUTH_SUCCESS" -export const AUTH_FAILURE = "AUTH_FAILURE" \ No newline at end of file +export const AUTH_FAILURE = "AUTH_FAILURE" +export const AUTH_LOGOUT = "AUTH_LOGOUT" \ No newline at end of file diff --git a/src/reducers/authReducers.js b/src/reducers/authReducers.js index 6faeba8..0166001 100644 --- a/src/reducers/authReducers.js +++ b/src/reducers/authReducers.js @@ -1,4 +1,4 @@ -import { AUTH_SUCCESS, AUTH_START, AUTH_FAILURE } from "../constants/authConstants"; +import { AUTH_SUCCESS, AUTH_START, AUTH_FAILURE, AUTH_LOGOUT } from "../constants/authConstants"; const initilaState = { token:"", user:{}, @@ -26,6 +26,8 @@ const authReducer = (state=initilaState,action) => { loading:false, error:true } + case AUTH_LOGOUT: + return {...initilaState} default: return state } From 586369e27379ceb2546120ec1bb56c484c7b3f1a Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:30:16 +0530 Subject: [PATCH 049/112] Genral no result component added --- src/Components/NoResult/NoResult.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/Components/NoResult/NoResult.js diff --git a/src/Components/NoResult/NoResult.js b/src/Components/NoResult/NoResult.js new file mode 100644 index 0000000..4b91332 --- /dev/null +++ b/src/Components/NoResult/NoResult.js @@ -0,0 +1,24 @@ +import React from "react"; +import noCollectionItem from "../../assets/Icons/no-collection.svg"; +import addIcon from "../../assets/Icons/add-tab.svg"; +const NoResult = ({navigator, title, noResultName}) => { + return ( +
    + +
    + +

    + No {noResultName} Found! +

    +
    +
    + ); +}; + +export default NoResult; From 6b26f68e4cbfd2f8ad77f75f1bdb33d0f4da30d4 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:30:31 +0530 Subject: [PATCH 050/112] Style and no result update --- src/Screens/Bookmarks.js | 117 ++++++++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 46 deletions(-) diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index eb199ae..cef5507 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -4,63 +4,88 @@ import logo from "../assets/Logo.svg"; import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; import dots from "../assets/Icons/3dot-menu.svg"; import PopupMenu from "../Components/Menu/PopupMenu"; +import { useNavigate } from "react-router-dom"; +import NoResult from "../Components/NoResult/NoResult"; const Bookmarks = () => { - const [showMenu,setShowMenu]=useState(false); + const [showMenu, setShowMenu] = useState(false); + const navigation = useNavigate(); + const [bookMarks, setBookMarks] = useState([]); + + const backScreenHandler = (e) => { + e.preventDefault(); + navigation(-1); + }; + return ( <>
    - -

    Create Collection

    -
    +
    -
    - {/* Collection Heading */} -
    -
    -
    - -
    -
    -

    Python Automation

    -

    8 Bookmarks

    -
    -
    -
    -
    setShowMenu(preState=>!preState)}> - + {bookMarks.length > 0 ? ( +
    + {/* Collection Heading */} +
    +
    +
    + +
    +
    +

    + Python Design Course (by Dell) +

    +

    8 Bookmarks

    +
    -
    - {showMenu && } +
    +
    setShowMenu((preState) => !preState)} + > + +
    +
    + {showMenu && } +
    -
    - {/* Collection list */} -
    - - - - - - - - - - - - - - - - - - - - - + {/* Collection list */} +
    + + + + + + + + + + + + + + + + + + + + + +
    -
    + ) : ( + + )} ); }; From 2d4287f24c73075aeb41e6b912b1687309477a6d Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:30:40 +0530 Subject: [PATCH 051/112] Style update --- src/Components/BookmarkItem/BookmarkItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js index 6b05f98..2c20165 100644 --- a/src/Components/BookmarkItem/BookmarkItem.js +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -9,7 +9,7 @@ const BookmarkItem = ({thumbnail,name,url,copyLinkHandler,shareLinkHandler,delet
    -

    {name}

    +

    {name}

    {url}

    From 70e4a08f8aec52dc68821f9270b2c31eb0908bc9 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:32:57 +0530 Subject: [PATCH 052/112] No result compnonent added --- src/Screens/Home.js | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 304d7cd..ed405c7 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -1,28 +1,12 @@ import React, { useEffect, useState } from "react"; import addIcon from "../assets/Icons/add-tab.svg"; import CollectionItem from "../Components/CollectiionItem/CollectionItem"; -import noCollectionItem from "../assets/Icons/no-collection.svg"; import SearchBox from "../Components/SearchBox/SearchBox"; import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; // import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; +import NoResult from "../Components/NoResult/NoResult"; -const EmptyCollections = ({navigator}) => { - return ( -
    - -
    - -

    - No collection Found! -

    -
    -
    - ); -}; const Home = () => { const [empty, setEmpty] = useState(false); @@ -42,7 +26,7 @@ const Home = () => { // } },[]) if (collections.length===0) { - return ; + return ; } return ( From 597fed8bfc00df06d8ac100b8aeed4d14fdff351 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:36:42 +0530 Subject: [PATCH 053/112] Routings done with auth and other design issue --- public/manifest.json | 4 ++-- src/popup.jsx | 12 +++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index f4df4b6..268f6f2 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -3,13 +3,13 @@ "version": "0.1.0", "description": "More than A Bookmark", "permissions": ["storage", "tabs","scripting","activeTab"], - "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"], + "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","http://*/*"], "background": { "service_worker": "background.js" }, "content_scripts": [ { - "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"], + "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","http://*/*"], "js": ["contentScript.js"] } ], diff --git a/src/popup.jsx b/src/popup.jsx index 81b4216..42ee29a 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -12,12 +12,9 @@ import { HashRouter, Routes, Route, Navigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux"; import reducers from "./reducers"; import {Provider} from "react-redux"; -import { authFailure, authStart, authSuccess } from "./actions/authActions"; +import { authStart, authSuccess } from "./actions/authActions"; import { createStore } from "redux"; -import { setJwtInRequestHeader } from "./api/httpService"; -import {getUserById} from "./api/authService" -import jwt from "jsonwebtoken" - + const Popup = () => { @@ -28,8 +25,6 @@ const Popup = () => { chrome.storage.local.get(['token'],async (res)=>{ dispatch(authStart()) console.log("hello",res.token) - // const {user: userId} = jwt.decode(res.token); - // const user = await getUserById() dispatch(authSuccess(res.token)) }) },[]) @@ -38,7 +33,6 @@ const Popup = () => { function init() { if (authState.token) { console.log(authState.token) - // setJwtInRequestHeader(authtoken); } } @@ -69,7 +63,7 @@ const Popup = () => { /> {authState.token && ( <> - } /> + } /> } /> } /> From 0e832b825dcd7ec6c61a27ec64fe23e1119e73a8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Mon, 10 Apr 2023 22:55:11 +0530 Subject: [PATCH 054/112] package update --- package-lock.json | 359 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 6 + 2 files changed, 358 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05766bf..eb637dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,17 @@ "license": "ISC", "dependencies": { "autoprefixer": "^10.4.14", + "axios": "^1.3.5", "css-loader": "^6.7.3", + "jsonwebtoken": "^9.0.0", "postcss": "^8.4.21", "postcss-loader": "^7.1.0", + "query-string": "^8.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-redux": "^8.0.5", + "react-router-dom": "^6.10.0", + "redux": "^4.2.1", "style-loader": "^3.3.2" }, "devDependencies": { @@ -1676,7 +1682,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -1829,6 +1834,14 @@ "node": ">= 8" } }, + "node_modules/@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "engines": { + "node": ">=14" + } + }, "node_modules/@types/eslint": { "version": "8.37.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", @@ -1852,6 +1865,15 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -1868,6 +1890,31 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.33", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.33.tgz", + "integrity": "sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -2184,6 +2231,11 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -2216,6 +2268,16 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/babel-loader": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", @@ -2395,6 +2457,11 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2570,6 +2637,17 @@ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2808,6 +2886,11 @@ "node": ">=4" } }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2825,6 +2908,22 @@ } } }, + "node_modules/decode-uri-component": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", + "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -2923,6 +3022,14 @@ "tslib": "^2.0.3" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.348", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.348.tgz", @@ -3114,6 +3221,17 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", + "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -3144,6 +3262,38 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -3290,6 +3440,19 @@ "he": "bin/he" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -3607,6 +3770,70 @@ "node": ">=6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -3661,8 +3888,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -3775,8 +4001,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mz": { "version": "2.7.0", @@ -4294,6 +4519,11 @@ "renderkid": "^3.0.0" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -4302,6 +4532,22 @@ "node": ">=6" } }, + "node_modules/query-string": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.1.0.tgz", + "integrity": "sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==", + "dependencies": { + "decode-uri-component": "^0.4.1", + "filter-obj": "^5.1.0", + "split-on-first": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4365,6 +4611,79 @@ "react": "^18.2.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", + "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "dependencies": { + "@remix-run/router": "1.5.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", + "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "dependencies": { + "@remix-run/router": "1.5.0", + "react-router": "6.10.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4398,6 +4717,14 @@ "node": ">= 10.13.0" } }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -4419,8 +4746,7 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.1", @@ -4702,6 +5028,17 @@ "source-map": "^0.6.0" } }, + "node_modules/split-on-first": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", + "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5018,6 +5355,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index c860587..ae3a6cb 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,17 @@ "homepage": "https://github.com/linkcollect/LinkCollect-Extension#readme", "dependencies": { "autoprefixer": "^10.4.14", + "axios": "^1.3.5", "css-loader": "^6.7.3", + "jsonwebtoken": "^9.0.0", "postcss": "^8.4.21", "postcss-loader": "^7.1.0", + "query-string": "^8.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-redux": "^8.0.5", + "react-router-dom": "^6.10.0", + "redux": "^4.2.1", "style-loader": "^3.3.2" }, "devDependencies": { From ea0ac04820beeef692dfac4ea05afa629101af2b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:51:39 +0530 Subject: [PATCH 055/112] New collection api integration --- .../CollectiionItem/CollectionItem.js | 4 +- src/Components/Input/Input.js | 8 ++- src/Screens/NewCollection.js | 62 +++++++++++++++++-- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index 7014350..be8bb2a 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -3,11 +3,11 @@ import logo from "../../assets/Logo.svg" import CopyIcon from "../../assets/Icons/copy.svg" import AddIcon from "../../assets/Icons/add.svg" import ShareIcon from "../../assets/Icons/arrow-share.svg" -const CollectionItem = ({thumbnail,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { +const CollectionItem = ({image,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { return (
    - +

    {name}

    {count}{" "}Bookmarks

    diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js index a1c0b16..fb02c66 100644 --- a/src/Components/Input/Input.js +++ b/src/Components/Input/Input.js @@ -10,7 +10,7 @@ const classMapper = { file:cursor-pointer `, textClass: - "mt-1 px-3 py-2 bg-bgSecodary border border-bgGrey placeholder-textPrimary focus:outline-none block w-full rounded-md sm:text-sm", + "mt-1 px-3 py-2 bg-bgSecodary border border-bgGrey text-textPrimary placeholder-textPrimary focus:outline-none block w-full rounded-md sm:text-sm", }; const Input = ({ @@ -37,7 +37,7 @@ const Input = ({ ); }; -export const Select = ({ options }) => { +export const Select = ({ name,onInputHandler,options }) => { return ( <>
    From 51f9dc586c10882f949acfa4b98c951f0a794e18 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:51:56 +0530 Subject: [PATCH 056/112] Getting all collections api integration --- src/Screens/Home.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index ed405c7..6f0d6af 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -4,7 +4,7 @@ import CollectionItem from "../Components/CollectiionItem/CollectionItem"; import SearchBox from "../Components/SearchBox/SearchBox"; import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; -// import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; +import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; import NoResult from "../Components/NoResult/NoResult"; @@ -21,9 +21,12 @@ const Home = () => { if(!auth.token){ return navigate("/") } - // const getCollections = async () =>{ - // const data = await getAllCollectionsWithoutTimelines() - // } + const getCollections = async () =>{ + const res = await getAllCollectionsWithoutTimelines() + console.log(res.data.data); + SetCollections(res.data.data) + } + getCollections(auth.token); },[]) if (collections.length===0) { return ; @@ -34,22 +37,22 @@ const Home = () => {
    -
    +

    Collections 8

    -
    - - - - + {collections.map(collection => ( + + ))} +
    From 20859406cb716b48110097c79c73d3f548d11719 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:52:09 +0530 Subject: [PATCH 057/112] setting user data --- src/reducers/authReducers.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/reducers/authReducers.js b/src/reducers/authReducers.js index 0166001..8d2f701 100644 --- a/src/reducers/authReducers.js +++ b/src/reducers/authReducers.js @@ -1,7 +1,7 @@ import { AUTH_SUCCESS, AUTH_START, AUTH_FAILURE, AUTH_LOGOUT } from "../constants/authConstants"; const initilaState = { token:"", - user:{}, + user:"", loading:false, error:false } @@ -17,7 +17,8 @@ const authReducer = (state=initilaState,action) => { case AUTH_SUCCESS : return { ...state, - token:data, + token:data.token, + userId:data.userId, loading:false, } case AUTH_FAILURE : From 980a970425473617483060ddd2f2a5c2dee6b4f6 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:52:26 +0530 Subject: [PATCH 058/112] Setting up tokens --- src/popup.jsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/popup.jsx b/src/popup.jsx index 42ee29a..43ea2f3 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -14,7 +14,8 @@ import reducers from "./reducers"; import {Provider} from "react-redux"; import { authStart, authSuccess } from "./actions/authActions"; import { createStore } from "redux"; - +import { setJwtInRequestHeader } from "./api/httpService"; +import jwt_decode from "jwt-decode"; const Popup = () => { @@ -25,14 +26,17 @@ const Popup = () => { chrome.storage.local.get(['token'],async (res)=>{ dispatch(authStart()) console.log("hello",res.token) - dispatch(authSuccess(res.token)) + const {user:userId }= jwt_decode(res.token); + dispatch(authSuccess({token:res.token,userId:userId})); + }) },[]) useEffect(() => { function init() { if (authState.token) { - console.log(authState.token) + console.log(authState.token); + setJwtInRequestHeader(authState.token); } } From 9ab346df78b1bf13002d4748def265b4ed1fe9c0 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:52:35 +0530 Subject: [PATCH 059/112] color update --- tailwind.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tailwind.config.js b/tailwind.config.js index c016e44..0bca99a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -10,6 +10,7 @@ module.exports = { bgSecodary:"#f9f9f9", bgGrey:"#f1f1f1", primary:"#6166f1", + lightPrimary:"#8084f3", secodary: "#dedff1", textPrimary:"#232438", textSecondary:"#636472", From 911f55f400554d8af6d4295e6961313262a188ae Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Tue, 11 Apr 2023 02:52:50 +0530 Subject: [PATCH 060/112] axios and jwt decode added --- package-lock.json | 6 ++++++ package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/package-lock.json b/package-lock.json index eb637dc..d5afeaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "axios": "^1.3.5", "css-loader": "^6.7.3", "jsonwebtoken": "^9.0.0", + "jwt-decode": "^3.1.2", "postcss": "^8.4.21", "postcss-loader": "^7.1.0", "query-string": "^8.1.0", @@ -3834,6 +3835,11 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", diff --git a/package.json b/package.json index ae3a6cb..851c6fb 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "axios": "^1.3.5", "css-loader": "^6.7.3", "jsonwebtoken": "^9.0.0", + "jwt-decode": "^3.1.2", "postcss": "^8.4.21", "postcss-loader": "^7.1.0", "query-string": "^8.1.0", From e399177717cb17720920e620d6356f1881088c73 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 12 Apr 2023 00:02:57 +0530 Subject: [PATCH 061/112] approve icon added --- src/assets/Icons/approve.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/Icons/approve.svg diff --git a/src/assets/Icons/approve.svg b/src/assets/Icons/approve.svg new file mode 100644 index 0000000..2fec2cb --- /dev/null +++ b/src/assets/Icons/approve.svg @@ -0,0 +1 @@ + \ No newline at end of file From 6eff6b25f4810c920664740904f936e4d9cadf51 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 12 Apr 2023 00:03:20 +0530 Subject: [PATCH 062/112] Tooltip created --- src/Components/Tooltip/Tooltip.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/Components/Tooltip/Tooltip.js diff --git a/src/Components/Tooltip/Tooltip.js b/src/Components/Tooltip/Tooltip.js new file mode 100644 index 0000000..1198c33 --- /dev/null +++ b/src/Components/Tooltip/Tooltip.js @@ -0,0 +1,16 @@ +import React, { Children, useRef } from "react"; + +const Tooltip = ({ name , children}) => { + return ( +
    + {children} + + {name} + +
    + ); +}; + +export default Tooltip; From c84bf2eaac7ac7eefdc18e19e1e055f977223ec1 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 12 Apr 2023 00:03:34 +0530 Subject: [PATCH 063/112] Loader created --- src/Components/Loader/Loader.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/Components/Loader/Loader.js diff --git a/src/Components/Loader/Loader.js b/src/Components/Loader/Loader.js new file mode 100644 index 0000000..67a2d40 --- /dev/null +++ b/src/Components/Loader/Loader.js @@ -0,0 +1,15 @@ +import React from "react"; + +const Loader = () => { + return ( +
    + + Loading... +
    + ); +}; + +export default Loader; From 5e60f4a72176fa9ec6b0d0575c1dfc3907acd9de Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 12 Apr 2023 00:03:57 +0530 Subject: [PATCH 064/112] copy link and web funtionally added --- .../CollectiionItem/CollectionItem.js | 88 +++++++++++++++---- src/Screens/Home.js | 69 ++++++++++----- 2 files changed, 117 insertions(+), 40 deletions(-) diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index be8bb2a..0668d4a 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -1,25 +1,75 @@ -import React from 'react' -import logo from "../../assets/Logo.svg" -import CopyIcon from "../../assets/Icons/copy.svg" -import AddIcon from "../../assets/Icons/add.svg" -import ShareIcon from "../../assets/Icons/arrow-share.svg" -const CollectionItem = ({image,name,count,copyLinkHandler,shareLinkHandler,addHandler}) => { +import React, { useRef, useState } from "react"; +import logo from "../../assets/Logo.svg"; +import CopyIcon from "../../assets/Icons/copy.svg"; +import AddIcon from "../../assets/Icons/add.svg"; +import ShareIcon from "../../assets/Icons/arrow-share.svg"; +import { Link } from "react-router-dom"; +import Tooltip from "../Tooltip/Tooltip"; +import Loader from "../Loader/Loader"; +import approve from "../../assets/Icons/approve.svg" + +const CollectionItem = ({ + image, + name, + count, + copyLinkHandler, + addHandler, + id, +}) => { + const [copyText,setCopyText] = useState("Copy Link"); + const copyImageRef = useRef(); + const onCopy = () => { + console.log(id); + setCopyText("Copied") + if(copyImageRef) copyImageRef.current.src=approve; + copyLinkHandler(id); + setTimeout(()=>{ + copyImageRef.current.src=CopyIcon + setCopyText("Copy Link"); + + },2500); + }; + + + return ( -
    -
    - -
    -

    {name}

    -

    {count}{" "}Bookmarks

    +
    +
    + +
    +

    {name}

    +

    {count} Bookmarks

    -
    - - - +
    + + + + + + + + + + +
    - ) -} + ); +}; -export default CollectionItem \ No newline at end of file +export default CollectionItem; diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 6f0d6af..1ccc5ac 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -6,30 +6,44 @@ import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; import NoResult from "../Components/NoResult/NoResult"; - +import Loader from "../Components/Loader/Loader"; const Home = () => { - const [empty, setEmpty] = useState(false); - const [collections,SetCollections] = useState([]); - const auth = useSelector(state=>state.auth); + const [collections, SetCollections] = useState([]); + const [loading, setLoadeing] = useState(false); + const auth = useSelector((state) => state.auth); const navigate = useNavigate(); - const createCollectionRedicector = () => { + const createCollectionRedicector = () => { navigate("/new-collection"); - } + }; - useEffect(()=>{ - if(!auth.token){ - return navigate("/") + useEffect(() => { + if (!auth.token) { + return navigate("/"); } - const getCollections = async () =>{ - const res = await getAllCollectionsWithoutTimelines() + setLoadeing(true); + const getCollections = async () => { + const res = await getAllCollectionsWithoutTimelines(); console.log(res.data.data); - SetCollections(res.data.data) - } + SetCollections(res.data.data); + setLoadeing(false) + }; getCollections(auth.token); - },[]) - if (collections.length===0) { - return ; + }, []); + + const handleCopy = (collectionId ) => { + console.log(collectionId) + navigator.clipboard.writeText(`http://localhost:3000/collections/${collectionId}`); + }; + + if (!loading && collections.length === 0) { + return ( + + ); } return ( @@ -37,24 +51,37 @@ const Home = () => {
    -
    + {!loading?

    Collections 8

    -
    - {collections.map(collection => ( - + {collections.map((collection) => ( + ))} -
    +
    : +
    +
    + }
    ); }; From e431567de9f2d3f0341bf397db6f03edbeb2f95c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 12:26:26 +0530 Subject: [PATCH 065/112] Tooltip design fixed --- src/Components/Tooltip/Tooltip.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Tooltip/Tooltip.js b/src/Components/Tooltip/Tooltip.js index 1198c33..f2b71f4 100644 --- a/src/Components/Tooltip/Tooltip.js +++ b/src/Components/Tooltip/Tooltip.js @@ -5,7 +5,7 @@ const Tooltip = ({ name , children}) => {
    {children} {name} From ef84b799779cbb0d1f7287fd94d07b3e70d90e2c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 12:34:15 +0530 Subject: [PATCH 066/112] Collection id functions and styles fix --- .../CollectiionItem/CollectionItem.js | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index 0668d4a..b4a03a5 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -7,17 +7,20 @@ import { Link } from "react-router-dom"; import Tooltip from "../Tooltip/Tooltip"; import Loader from "../Loader/Loader"; import approve from "../../assets/Icons/approve.svg" - +import approveWhite from "../../assets/approve-white.svg" const CollectionItem = ({ image, name, count, copyLinkHandler, addHandler, - id, + id:collectionId, + }) => { const [copyText,setCopyText] = useState("Copy Link"); + const [isAdding,setIsAdding] = useState(false); const copyImageRef = useRef(); + const bookMarkImage = useRef(); const onCopy = () => { console.log(id); setCopyText("Copied") @@ -31,14 +34,25 @@ const CollectionItem = ({ }; + const addBookMarkHandler = async (e) =>{ + setIsAdding(true); + await addHandler(id); + setIsAdding(false); + console.log(bookmark) + if(bookmark) bookmark.current.src=approveWhite; + setTimeout(()=>{ + bookmark.current.src=AddIcon + },2500) + } + return ( -
    +
    -

    {name}

    -

    {count} Bookmarks

    +

    {name}

    +

    {count} Bookmarks

    @@ -53,7 +67,7 @@ const CollectionItem = ({ @@ -62,13 +76,14 @@ const CollectionItem = ({
    -
    + ); }; From 4921d32f5089ea7033e0d757b5fa5fce34f00c33 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 12:38:28 +0530 Subject: [PATCH 067/112] Home page funtionality added and styles update --- src/Screens/Home.js | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 1ccc5ac..7d94ed2 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -7,6 +7,8 @@ import { useNavigate } from "react-router-dom"; import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; import NoResult from "../Components/NoResult/NoResult"; import Loader from "../Components/Loader/Loader"; +import { getCurrentTab } from "../utils/chromeAPI"; +import { createTimeline } from "../api/timelineService"; const Home = () => { const [collections, SetCollections] = useState([]); @@ -36,6 +38,28 @@ const Home = () => { navigator.clipboard.writeText(`http://localhost:3000/collections/${collectionId}`); }; + + const addHandler = async (collectionId) =>{ + try { + const time = new Date('14 Jun 2017 00:00:00 PDT').toUTCString(); + const getTab = await getCurrentTab(); + console.log(getTab) + const timeline = {link: getTab.url, note: getTab.title, time } + // DB Add + const {data} = await createTimeline(collectionId, timeline); + + // Instant state update + const collectionIndex = collections.findIndex(collection=>collection._id === collectionId); + const updatedCollections = [...collections]; + updatedCollections[collectionIndex].timelines.push(data._id); + SetCollections(updatedCollections); + console.log(data) + } catch (error) { + // Need to provide a error message + console.log(error); + } + } + if (!loading && collections.length === 0) { return ( { ); } + + return (
    -
    +
    - {!loading?
    -
    + {!loading? +
    +

    Collections - 8 + {collections.length}

    -
    +
    {collections.map((collection) => ( { key={collection._id} id={collection._id} copyLinkHandler={handleCopy} + addHandler={addHandler} /> ))}
    From adb112546628d7a91e722056adf53dbff37bda87 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 15:27:04 +0530 Subject: [PATCH 068/112] privacy endpoint added --- src/api/collectionService.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/api/collectionService.js b/src/api/collectionService.js index d32f635..cc59df2 100644 --- a/src/api/collectionService.js +++ b/src/api/collectionService.js @@ -27,6 +27,10 @@ export function deleteCollection(collectionId) { return http.delete(`${apiEndpoint}/${collectionId}`); } +export function togglePrivacy(collectionId) { + return http.post(`${apiEndpoint}/togglePrivacy/${collectionId}`) +} + // Special API call // Without timelines export function getAllCollectionsWithoutTimelines() { From be06a2682dcb158056d00e92ae8f5eb8efb6dac7 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:17:15 +0530 Subject: [PATCH 069/112] Bookmarks functions added --- src/Components/BookmarkItem/BookmarkItem.js | 96 +++++++++-- src/Components/Menu/PopupMenu.js | 57 ++++-- src/Components/ToogleButton/ToggleButton.js | 5 +- src/Screens/Bookmarks.js | 182 ++++++++++++++++---- 4 files changed, 267 insertions(+), 73 deletions(-) diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js index 2c20165..debb423 100644 --- a/src/Components/BookmarkItem/BookmarkItem.js +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -1,25 +1,83 @@ -import React from 'react' -import CopyIcon from "../../assets/Icons/copyLight.svg" -import DeleteIcon from "../../assets/Icons/delete.svg" -import ShareIcon from "../../assets/Icons/arrow-share.svg" -import logo from "../../assets/Logo.svg" -const BookmarkItem = ({thumbnail,name,url,copyLinkHandler,shareLinkHandler,deleteHandler}) => { +import React, { useRef, useState } from "react"; +import { Link } from "react-router-dom"; + +import Tooltip from "../Tooltip/Tooltip"; +import Loader from "../Loader/Loader"; + +import CopyIcon from "../../assets/Icons/copyLight.svg"; +import DeleteIcon from "../../assets/Icons/delete.svg"; +import ShareIcon from "../../assets/Icons/arrow-share.svg"; +import logo from "../../assets/Logo.svg"; +import approveWhite from "../../assets/approve-white.svg" + +import { getOrigin, nameShortner } from "../../utils/utilty"; + +const BookmarkItem = ({ id, thumbnail, name, url, onDelete }) => { + const [isDelting, setIsDeleting] = useState(false); + const [copyText,setCopyText] = useState("Copy Link") + const copyImageRef = useRef() + + // Delete bookmark link + const deletehanlder = async () => { + setIsDeleting(true); + await onDelete(id); + setIsDeleting(false); + }; + + //Copy bookmark link + const copyLinkHandler = () =>{ + setCopyText("Link Copied!") + if(copyImageRef) copyImageRef.current.src=approveWhite; + navigator.clipboard.writeText(url); + setTimeout(()=>{ + copyImageRef.current.src=CopyIcon + setCopyText("Copy Link"); + },2500); + } + + return ( -
    -
    - -
    -

    {name}

    -

    {url}

    +
    +
    + +
    +

    + {nameShortner(name)} +

    +

    + {getOrigin(url)} +

    -
    - - - +
    + + + + + + + + + + +
    - ) -} + ); +}; -export default BookmarkItem \ No newline at end of file +export default BookmarkItem; diff --git a/src/Components/Menu/PopupMenu.js b/src/Components/Menu/PopupMenu.js index c748ebc..f4e6a1e 100644 --- a/src/Components/Menu/PopupMenu.js +++ b/src/Components/Menu/PopupMenu.js @@ -1,17 +1,46 @@ -import React from 'react' -import ToggleButton from '../ToogleButton/ToggleButton' -import copy from "../../assets/Icons/copy.svg" -import OpenLink from "../../assets/Icons/openLink.svg" -const PopupMenu = () => { +import React, { useRef } from "react"; + +import ToggleButton from "../ToogleButton/ToggleButton"; +import copy from "../../assets/Icons/copy.svg"; +import OpenLink from "../../assets/Icons/openLink.svg"; +import approve from "../../assets/Icons/approve.svg"; +import { Link } from "react-router-dom"; + +const PopupMenu = ({ onCopyCollection, isPublic, onPrivacyToggle, collectionLink }) => { + const copyImageRef = useRef(); + console.log(isPublic); + const copyLinkHandler = () => { + if (copyImageRef) copyImageRef.current.src = approve; + onCopyCollection(); + setTimeout(() => { + copyImageRef.current.src = copy; + }, 1500); + }; return (
    -
      -
    • Copy Link

    • -
    • Public

    • -
    • Open in web

    • -
    -
    - ) -} +
      +
    • +

      Copy Link

      + +
    • +
    • +

      Public

      + +
    • +
    • +

      Open in web

      + + + +
    • +
    +
    + ); +}; -export default PopupMenu \ No newline at end of file +export default PopupMenu; diff --git a/src/Components/ToogleButton/ToggleButton.js b/src/Components/ToogleButton/ToggleButton.js index 9aebba8..ef512bd 100644 --- a/src/Components/ToogleButton/ToggleButton.js +++ b/src/Components/ToogleButton/ToggleButton.js @@ -1,9 +1,10 @@ import React from "react"; -const ToggleButton = () => { +const ToggleButton = ({isPublic,onPrvaciyUpdate}) => { + console.log(isPublic) return ( ) diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index cef5507..65f7fad 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -1,24 +1,115 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; +import { useLocation, useNavigate, useParams } from "react-router-dom"; + import BackArrow from "../assets/Icons/arrow.svg"; import logo from "../assets/Logo.svg"; -import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; import dots from "../assets/Icons/3dot-menu.svg"; +import AddIcon from "../assets/Icons/add.svg"; + +import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; import PopupMenu from "../Components/Menu/PopupMenu"; -import { useNavigate } from "react-router-dom"; import NoResult from "../Components/NoResult/NoResult"; +import Loader from "../Components/Loader/Loader"; +import Tooltip from "../Components/Tooltip/Tooltip"; + +import { getCurrentTab } from "../utils/chromeAPI"; + +import { getCollection, togglePrivacy } from "../api/collectionService"; +import { deleteTimeline, createTimeline } from "../api/timelineService"; +import { useSelector } from "react-redux"; const Bookmarks = () => { const [showMenu, setShowMenu] = useState(false); const navigation = useNavigate(); - const [bookMarks, setBookMarks] = useState([]); + const { collectionId } = useParams(); + const [collection, setCollection] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [isAdding, setIsAdding] = useState(false); + const auth = useSelector((state) => state.auth.userId); + + useEffect(() => { + setIsLoading(true); + console.log(isLoading); + try { + async function gettingCollection() { + const { data } = await getCollection(collectionId); + console.log(data); + setCollection(data.data); + setIsLoading(false); + } + gettingCollection(); + } catch (error) { + console.log(error); + setIsLoading(false); + } + }, []); + + // Delete Bookmark + const deleleteBookmark = async (timeLineId) => { + try { + //DB delete + await deleteTimeline(collection._id, timeLineId); + // state update + const tempCollection = { ...collection }; + tempCollection.timelines = tempCollection.timelines.filter( + (timeline) => timeline._id !== timeLineId + ); + setCollection(tempCollection); + } catch (error) { + console.log(error); + } + }; + + //Add bookmark + const addBookMarkHandler = async () => { + setIsAdding(true); + try { + const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); + const getTab = await getCurrentTab(); + console.log(getTab); + const timeline = { link: getTab.url, note: getTab.title, time }; + // DB Add + const { data } = await createTimeline(collection._id, timeline); + + // Instant state update + const tempCollection = collection; + tempCollection.timelines.push(data.data); + console.log(tempCollection); + setCollection(tempCollection); + } catch (error) { + // Need to provide a error message + console.log(error); + } + setIsAdding(false); + }; + + // Collection copy + const collectionCopyHandler = () => { + navigator.clipboard.writeText( + `http://localhost:3000/collections/${collectionId}` + ); + }; + + // COllection privacy update + const prvaciyTogglerHandler = async () => { + // UI update + const tempCollection ={...collection}; + tempCollection.isPublic = !tempCollection.isPublic; + setCollection(tempCollection); + //DB update + const { data } = await togglePrivacy(collectionId); + console.log(data); + + }; const backScreenHandler = (e) => { e.preventDefault(); navigation(-1); }; - +console.log("render") return ( <> + {/* Back button container */}
    - {bookMarks.length > 0 ? ( -
    + {isLoading ? ( +
    + +
    + ) : collection.timelines && collection.timelines.length > 0 ? ( +
    {/* Collection Heading */} -
    +
    -
    - -

    - Python Design Course (by Dell) + {collection.title} +

    +

    + {collection.timelines.length} Bookmarks

    -

    8 Bookmarks

    @@ -52,35 +146,47 @@ const Bookmarks = () => { >
    -
    - {showMenu && } +
    + {showMenu && ( + + )}
    {/* Collection list */} -
    - - - - - - - - - - - - - - - - - - - - - +
    + {collection.timelines.map((timeline) => ( + + ))} +
    + + {/* Add bookmark */} +
    + + +
    ) : ( From 87f7943d15a16877c2f0badf5b6004fb5158ded8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:17:33 +0530 Subject: [PATCH 070/112] Collection api update --- src/api/collectionService.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/collectionService.js b/src/api/collectionService.js index cc59df2..afbaff7 100644 --- a/src/api/collectionService.js +++ b/src/api/collectionService.js @@ -11,8 +11,10 @@ export function getAllCollections() { } // With Timelines -export function getCollection(collectionId) { - return http.get(`${apiEndpoint}/${collectionId}`); +export function getCollection(collectionId,userId) { + return http.get(`${apiEndpoint}/${collectionId}`,{ + user:userId + }); } export function createCollection(collectionData) { From 012c8157a00007c4dc1ec5339b948b850fc8f042 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:17:44 +0530 Subject: [PATCH 071/112] new color added --- tailwind.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tailwind.config.js b/tailwind.config.js index 0bca99a..b8daa4a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -12,6 +12,7 @@ module.exports = { primary:"#6166f1", lightPrimary:"#8084f3", secodary: "#dedff1", + secodaryLight:"#e8e9f8", textPrimary:"#232438", textSecondary:"#636472", textLight:"#f6f6f6", From 619ecff11a13fb4a96c8eac3e4319f2dd6de065c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:18:12 +0530 Subject: [PATCH 072/112] Validation check added --- src/popup.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/popup.jsx b/src/popup.jsx index 43ea2f3..9b1dc7d 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -24,10 +24,12 @@ const Popup = () => { console.log(authState); useEffect(()=>{ chrome.storage.local.get(['token'],async (res)=>{ + if(res.token){ dispatch(authStart()) console.log("hello",res.token) const {user:userId }= jwt_decode(res.token); dispatch(authSuccess({token:res.token,userId:userId})); + } }) },[]) @@ -68,8 +70,8 @@ const Popup = () => { {authState.token && ( <> } /> - } /> - } /> + } /> + } /> )} From 8b4e2a315efd706893e794a6f07371ba5f2e16ee Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:18:26 +0530 Subject: [PATCH 073/112] scroll bar style fixed --- src/popup.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/popup.css b/src/popup.css index 341ab0f..d0a018e 100644 --- a/src/popup.css +++ b/src/popup.css @@ -13,7 +13,8 @@ body{ /* Chrome, Edge, and Safari */ *::-webkit-scrollbar { - width: 4px; + width: 3px; + background-color: #D1D1D1; } *::-webkit-scrollbar-track { @@ -21,6 +22,6 @@ body{ } *::-webkit-scrollbar-thumb { - background-color: #6166f1; + background-color: #232438; border-radius: 14px; } \ No newline at end of file From fee0dc60d433ee3ae511ad8dceedc14e3fe4101c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:18:36 +0530 Subject: [PATCH 074/112] ne approve icon added --- src/assets/approve-white.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/approve-white.svg diff --git a/src/assets/approve-white.svg b/src/assets/approve-white.svg new file mode 100644 index 0000000..4c964ab --- /dev/null +++ b/src/assets/approve-white.svg @@ -0,0 +1 @@ + \ No newline at end of file From 69993ef01d96de58c8e89847791fd6b886a7c032 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:19:23 +0530 Subject: [PATCH 075/112] removed footer --- src/Layout/Layout.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Layout/Layout.js b/src/Layout/Layout.js index 979a9a5..6bbb416 100644 --- a/src/Layout/Layout.js +++ b/src/Layout/Layout.js @@ -2,10 +2,10 @@ import React from "react"; import Navbar from "../Components/Navbar/Navbar"; const Layout = ({ token, children }) => { return ( -
    +
    {token && } {children} -
    Powered by Linkcollect.io
    + {/*
    Powered by Linkcollect.io
    */}
    ); }; From 44d29c67cac4867ed951ee0c5360c18faf937de3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:19:39 +0530 Subject: [PATCH 076/112] Function and style update --- src/Components/Input/Input.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js index fb02c66..4fb31f9 100644 --- a/src/Components/Input/Input.js +++ b/src/Components/Input/Input.js @@ -22,7 +22,7 @@ const Input = ({ inputClass, }) => { return ( -
    - {collections.map((collection) => ( + {filteredCollection.map((collection) => ( Date: Sun, 16 Apr 2023 17:21:23 +0530 Subject: [PATCH 081/112] form for new collections added --- src/Screens/NewCollection.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index 79ee98f..6b581aa 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -3,13 +3,14 @@ import Input, {Select} from "../Components/Input/Input"; import BackArrow from "../assets/Icons/arrow.svg"; import { useNavigate } from "react-router-dom"; import { createCollection } from "../api/collectionService"; +import Loader from "../Components/Loader/Loader"; const NewCollection = () => { const navigate = useNavigate(); const [data,setData] = useState({ title:"", - privacy:"", + privacy:"public", description:"" }) const [image,setImage] = useState(); @@ -43,6 +44,7 @@ const NewCollection = () => { form.append("description",data.description); form.append("privacy",data.privacy); const {collectionData} = await createCollection(form); + navigate(-1) }catch(e){ console.log(e); } @@ -59,7 +61,7 @@ const NewCollection = () => {

    Create Collection

    -
    +
    { inputClass="textClass" name="description" /> - { onInputHandler={onInputFile} inputClass="fileClass" /> -
    From 14bdf26b146693f005689eb84e900d2ab067502c Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sun, 16 Apr 2023 17:21:45 +0530 Subject: [PATCH 082/112] Loader style update --- src/Components/Loader/Loader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Loader/Loader.js b/src/Components/Loader/Loader.js index 67a2d40..2e8c33f 100644 --- a/src/Components/Loader/Loader.js +++ b/src/Components/Loader/Loader.js @@ -3,7 +3,7 @@ import React from "react"; const Loader = () => { return (
    -
    - + + +

    {nameShortner(name)} diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index a9cdfd4..210d259 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -1,5 +1,5 @@ import React, { useRef, useState } from "react"; -import logo from "../../assets/Logo.svg"; +import logo from "../../assets/Icons/folder.png"; import CopyIcon from "../../assets/Icons/copy.svg"; import AddIcon from "../../assets/Icons/add.svg"; import ShareIcon from "../../assets/Icons/arrow-share.svg"; @@ -8,6 +8,7 @@ import Tooltip from "../Tooltip/Tooltip"; import Loader from "../Loader/Loader"; import approve from "../../assets/Icons/approve.svg" import approveWhite from "../../assets/approve-white.svg" +import { useSelector } from "react-redux"; const CollectionItem = ({ image, name, @@ -21,6 +22,7 @@ const CollectionItem = ({ const [isAdding,setIsAdding] = useState(false); const copyImageRef = useRef(); const bookMarkImage = useRef(); + const auth = useSelector(state=>state.auth); const onCopy = () => { console.log(collectionId); setCopyText("Copied") @@ -47,17 +49,19 @@ const CollectionItem = ({ return ( -

    +
    +
    - +

    {name}

    {count} Bookmarks

    +
    -
    +
    -
    +
    ); }; diff --git a/src/Components/Input/Input.js b/src/Components/Input/Input.js index 4fb31f9..e4cf27a 100644 --- a/src/Components/Input/Input.js +++ b/src/Components/Input/Input.js @@ -20,6 +20,7 @@ const Input = ({ placeholder, onInputHandler, inputClass, + value }) => { return ( ); diff --git a/src/Components/Loader/Loader.js b/src/Components/Loader/Loader.js index 2e8c33f..ead39f0 100644 --- a/src/Components/Loader/Loader.js +++ b/src/Components/Loader/Loader.js @@ -1,14 +1,14 @@ import React from "react"; -const Loader = () => { +const Loader = ({text}) => { return (
    - Loading... -
    + {text} +
    ); }; diff --git a/src/Components/Loader/PageLoader.js b/src/Components/Loader/PageLoader.js new file mode 100644 index 0000000..f274907 --- /dev/null +++ b/src/Components/Loader/PageLoader.js @@ -0,0 +1,60 @@ +import React, { useEffect, useState, useCallback } from "react"; +const names = [ + "wasting your valuable time", + "Calling gpt-3 apis for no reason", + "Running a ml algorithm", + "Stealing your data (jk)", + "Tryna crash your system", + "Enjoy this useless loading animation", + "Our premium plan is faster", + "One mississippi, two mississippi...", + "Initializing the initializer...", + "Feel free to spin in your chair", + "Don't wait if you don't want to", + "Laughing at your pictures-i mean,loading...", +]; + +const PageLoader = () => { + const [name, setnewName] = useState(""); + const shuffle = useCallback(() => { + const index = Math.floor(Math.random() * names.length); + setnewName(names[index]); + }, []); + useEffect(() => { + const intervalID = setInterval(shuffle, 200); + return () => clearInterval(intervalID); + }, [shuffle]); + + return ( +
    +
    + + + + +
    + +

    {name}

    +
    + ); +}; + +export default PageLoader; diff --git a/src/Components/Menu/PopupMenu.js b/src/Components/Menu/PopupMenu.js index f4e6a1e..d218ca3 100644 --- a/src/Components/Menu/PopupMenu.js +++ b/src/Components/Menu/PopupMenu.js @@ -1,14 +1,13 @@ import React, { useRef } from "react"; - -import ToggleButton from "../ToogleButton/ToggleButton"; import copy from "../../assets/Icons/copy.svg"; import OpenLink from "../../assets/Icons/openLink.svg"; import approve from "../../assets/Icons/approve.svg"; +import edit from "../../assets/Icons/edit.svg" import { Link } from "react-router-dom"; - -const PopupMenu = ({ onCopyCollection, isPublic, onPrivacyToggle, collectionLink }) => { +import deleteI from "../../assets/Icons/delete.svg" +import openTabs from "../../assets/Icons/opentabs.svg" +const PopupMenu =React.forwardRef( ({ title,privacy,collectionId,onCopyCollection, collectionLink , onDelete,onOpenAllLink}) => { const copyImageRef = useRef(); - console.log(isPublic); const copyLinkHandler = () => { if (copyImageRef) copyImageRef.current.src = approve; onCopyCollection(); @@ -16,31 +15,40 @@ const PopupMenu = ({ onCopyCollection, isPublic, onPrivacyToggle, collectionLink copyImageRef.current.src = copy; }, 1500); }; + + const deleteHandler = () =>{ + onDelete() + } + return ( -
    +
    e.stopPropagation()} className="w-[12rem] rounded-md bg-bgPrimary drop-shadow-md px-3 pt-2">
      -
    • -

      Copy Link

      -
    • -
    • -

      Public

      - + +

      View in web

      + + + +

      Edit Collection

      + + +
    • +

      Open all tabs

      +
    • -
    • -

      Open in web

      - - - +
    • +

      Delete Collection

      +
    ); -}; +}); export default PopupMenu; diff --git a/src/Components/Menu/SideMenu.js b/src/Components/Menu/SideMenu.js index ac0be18..0c1dd3a 100644 --- a/src/Components/Menu/SideMenu.js +++ b/src/Components/Menu/SideMenu.js @@ -4,55 +4,72 @@ import openLink from "../../assets/Icons/openLink.svg"; import help from "../../assets/Icons/help.svg"; import logoout from "../../assets/Icons/logout.svg"; +const MenuItem = ({ name, icon, onCLickHandler, link }) => { + console.log(onCLickHandler); + return ( + +
  • + +
  • +
    + ); +}; -const MenuItem = ({name,icon,onCLickHandler}) =>{ - console.log(onCLickHandler) - return ( -
  • - -
  • - ) -} - - -const SideMenu = ({onLogout}) => { - +const SideMenu = React.forwardRef(({ onLogout, isOpen, navref }) => { + console.log(isOpen); - const menuList = [{ - name:"Open in Web", - icon: openLink, + const menuList = [ + { + name: "Open in Web", + icon: openLink, + link: "https://www.linkcollect.io/", }, { - name:"View Commands", - icon: command, + name: "View Commands", + icon: command, + link: "https://www.linkcollect.io/commands", }, { - name:"Help", - icon:help + name: "Help", + icon: help, + link: "https://www.linkcollect.io/help", }, { - name:"Logout", - icon:logoout, - onCLickHandler:onLogout - } - -] + name: "Logout", + icon: logoout, + onCLickHandler: onLogout, + }, + ]; return ( -
    - -
    -
      - {menuList.map(menu=>)} -
    +
    +
    e.stopPropagation()} + > +
    +
      + {menuList.map((menu) => ( + + ))} +
    +
    ); -}; - - +}); export default SideMenu; diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index 5e55edf..bdef565 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useEffect, useState, useRef } from "react"; import logo from "../../assets/Branding/logo2.svg"; import avatar from "../../assets/avatar.svg"; import SideMenu from "../Menu/SideMenu"; @@ -11,6 +11,9 @@ const Navbar = () => { const [show, setShow] = useState(false); const dispatch = useDispatch(); const navigate = useNavigate(); + const profileRef=useRef(); + const navaref = useRef(); + const logoutHandler = (e) =>{ e.preventDefault(); console.log("log") @@ -19,20 +22,26 @@ const Navbar = () => { navigate("/") }) } + + window.addEventListener('click',e=>{ + console.log(e.target,profileRef.current) + if(e.target !== profileRef.current && e.target !== navaref.current) { + setShow(false); + } + }) + return (
    - +
    setShow(prevState=>!prevState)}> - +
    - {show && ( - - )} +
    ); }; diff --git a/src/Components/NoResult/NoResult.js b/src/Components/NoResult/NoResult.js index 4b91332..5d7c2c7 100644 --- a/src/Components/NoResult/NoResult.js +++ b/src/Components/NoResult/NoResult.js @@ -1,15 +1,20 @@ import React from "react"; import noCollectionItem from "../../assets/Icons/no-collection.svg"; import addIcon from "../../assets/Icons/add-tab.svg"; -const NoResult = ({navigator, title, noResultName}) => { +import Loader from "../Loader/Loader"; +const NoResult = ({onAdd, title, noResultName,bookMark,loading}) => { return ( -
    +
    diff --git a/src/Components/SearchBox/SearchBox.js b/src/Components/SearchBox/SearchBox.js index cc5d7cc..2db5f37 100644 --- a/src/Components/SearchBox/SearchBox.js +++ b/src/Components/SearchBox/SearchBox.js @@ -2,7 +2,7 @@ import React from "react"; import filterMenu from "../../assets/Icons/filter--menu.svg" const SearchBox = ({onSearch}) => { return ( - +
    @@ -30,14 +30,7 @@ const SearchBox = ({onSearch}) => { onChange={onSearch} />
    - - +
    ); }; diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 65f7fad..6ada7d8 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { useLocation, useNavigate, useParams } from "react-router-dom"; import BackArrow from "../assets/Icons/arrow.svg"; @@ -14,9 +14,10 @@ import Tooltip from "../Components/Tooltip/Tooltip"; import { getCurrentTab } from "../utils/chromeAPI"; -import { getCollection, togglePrivacy } from "../api/collectionService"; +import { deleteCollection, getCollection, togglePrivacy } from "../api/collectionService"; import { deleteTimeline, createTimeline } from "../api/timelineService"; import { useSelector } from "react-redux"; +import PageLoader from "../Components/Loader/PageLoader"; const Bookmarks = () => { const [showMenu, setShowMenu] = useState(false); @@ -25,7 +26,9 @@ const Bookmarks = () => { const [collection, setCollection] = useState([]); const [isLoading, setIsLoading] = useState(false); const [isAdding, setIsAdding] = useState(false); - const auth = useSelector((state) => state.auth.userId); + const popupref = useRef(); + const menuRef= useRef(); + const auth = useSelector((state) => state.auth); useEffect(() => { setIsLoading(true); @@ -67,7 +70,7 @@ const Bookmarks = () => { const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); const getTab = await getCurrentTab(); console.log(getTab); - const timeline = { link: getTab.url, note: getTab.title, time }; + const timeline = { link: getTab.url, title: getTab.title,favicon:getTab.favIconUrl, time }; // DB Add const { data } = await createTimeline(collection._id, timeline); @@ -86,27 +89,45 @@ const Bookmarks = () => { // Collection copy const collectionCopyHandler = () => { navigator.clipboard.writeText( - `http://localhost:3000/collections/${collectionId}` + `http://linkcollect.io/${auth.user.username}/${collectionId}` ); }; - // COllection privacy update - const prvaciyTogglerHandler = async () => { - // UI update - const tempCollection ={...collection}; - tempCollection.isPublic = !tempCollection.isPublic; - setCollection(tempCollection); - //DB update - const { data } = await togglePrivacy(collectionId); - console.log(data); + // Delete collection + const collectionDeleter = async () =>{ + setShowMenu(false); + setIsLoading(true); + try{ + await deleteCollection(collectionId); + setIsLoading(false) + navigation("/collection") + }catch(e){ + console.log(e) + setIsLoading(false); + } + } - }; + // opening all tabs at one go + const openAllLinks = ()=> { + for(var i=0;i { e.preventDefault(); navigation(-1); }; -console.log("render") + + // Need to think more bettor solution + // Popup menu close functiinality if users clocked outside of it + window.addEventListener("click",e=>{ + if(e.target !== popupref.current && e.target !== menuRef.current){ + console.log("Close") + setShowMenu(false); + } + }) + return ( <> {/* Back button container */} @@ -121,21 +142,14 @@ console.log("render")

    - {isLoading ? ( -
    - -
    - ) : collection.timelines && collection.timelines.length > 0 ? ( -
    - {/* Collection Heading */} -
    + {!isLoading &&

    {collection.title}

    - {collection.timelines.length} Bookmarks + {collection.timelines?.length || 0} Bookmarks

    @@ -144,21 +158,32 @@ console.log("render") className="cursor-pointer" onClick={() => setShowMenu((preState) => !preState)} > - +
    {showMenu && ( )}
    -
    +
    } + {isLoading ? ( +
    + +
    + ) : collection.timelines && collection.timelines.length > 0 ? ( +
    + {/* Collection Heading */} + {/* Collection list */}
    @@ -166,8 +191,9 @@ console.log("render") ))} @@ -190,7 +216,7 @@ console.log("render")
    ) : ( - + )} ); diff --git a/src/Screens/EditCollection.js b/src/Screens/EditCollection.js new file mode 100644 index 0000000..adbd7b0 --- /dev/null +++ b/src/Screens/EditCollection.js @@ -0,0 +1,85 @@ +import React, {useState} from "react"; +import Input, {Select} from "../Components/Input/Input"; +import BackArrow from "../assets/Icons/arrow.svg"; +import { useLocation, useNavigate, useParams } from "react-router-dom"; +import { updateCollection } from "../api/collectionService"; +import Loader from "../Components/Loader/Loader"; + + +const EditCollection = () => { + const navigate = useNavigate(); + const loction = useLocation(); + const {collectionId} = useParams(); + const [data,setData] = useState({ + title:loction.state.title, + privacy:loction.state.privacy?"public":"private", + }) + console.log(loction) + + const [loading,setLoading] = useState(false); + const onInput = (e) => { + e.preventDefault(); + setData(state=>({...state,[e.target.name]:e.target.value})); + }; + + + + + + const backButtonHnadler = (e) => { + e.preventDefault(); + navigate(-1); + } + + const handleSubmit = async (e) => { + e.preventDefault(); + console.log(data) + if(data.title=== "" ) return + setLoading(true); + try{ + const form = new FormData(); + form.append("title",data.title); + form.append("privacy",data.privacy); + const {collectionData} = await updateCollection(collectionId,form); + navigate(-1) + }catch(e){ + console.log(e); + } + setLoading(false); + console.log(data); + } + + + return ( + <> + {/* Need to create a shadow warppr later */} +
    + +
    +
    +
    + + { onInputHandler={onInput} inputClass="textClass" name="description" + value={data.description} /> + + diff --git a/src/assets/Icons/folder.png b/src/assets/Icons/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..5fce05cbd5500e4bbf9b0db094a60d2896167ad9 GIT binary patch literal 390264 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%0A!}w^_sgA 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

    gJuDbr!RK>1xc3Gj}g&^ew1eu4OkY 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 z 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%0AMk* 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

    {g>P6 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

    5Ukg{S!#OWLrR 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 + + diff --git a/src/popup.html b/src/popup.html index b541f9d..d06ee58 100644 --- a/src/popup.html +++ b/src/popup.html @@ -4,10 +4,10 @@ - Document + Linkcollect -
    Pinboard
    +
    Linkcollect
    \ No newline at end of file diff --git a/src/popup.jsx b/src/popup.jsx index 9b1dc7d..df50491 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -8,33 +8,39 @@ import Splash from "./Screens/Splash"; import Home from "./Screens/Home"; import NewCollection from "./Screens/NewCollection"; import Bookmarks from "./Screens/Bookmarks"; +import EditCollection from "./Screens/EditCollection"; import { HashRouter, Routes, Route, Navigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux"; import reducers from "./reducers"; -import {Provider} from "react-redux"; +import { Provider } from "react-redux"; import { authStart, authSuccess } from "./actions/authActions"; import { createStore } from "redux"; import { setJwtInRequestHeader } from "./api/httpService"; import jwt_decode from "jwt-decode"; - +import PageLoader from "./Components/Loader/PageLoader"; const Popup = () => { - const dispatch = useDispatch(); - const authState = useSelector(state=>state.auth) + const dispatch = useDispatch(); + const authState = useSelector((state) => state.auth); console.log(authState); - useEffect(()=>{ - chrome.storage.local.get(['token'],async (res)=>{ - if(res.token){ - dispatch(authStart()) - console.log("hello",res.token) - const {user:userId }= jwt_decode(res.token); - dispatch(authSuccess({token:res.token,userId:userId})); + useEffect(() => { + chrome.storage.local.get(["token"], async (res) => { + if (res.token) { + dispatch(authStart()); + console.log("hello", res.token); + const response = jwt_decode(res.token); + console.log(response); + dispatch( + authSuccess({ + token: res.token, + user: { userId: response.userId, username: response.username }, + }) + ); } - - }) - },[]) + }); + }, []); - useEffect(() => { + useEffect(() => { function init() { if (authState.token) { console.log(authState.token); @@ -44,13 +50,11 @@ const Popup = () => { init(); }, [authState.token]); - - - - - if(authState.loading){ - return "Loading.." + console.log(authState); + + if (authState.loading) { + return "Loading.."; } return ( @@ -60,18 +64,18 @@ const Popup = () => { - ) : ( - - ) + !authState.token ? : } /> {authState.token && ( <> } /> - } /> - } /> + } /> + } /> + } + /> )} @@ -80,17 +84,15 @@ const Popup = () => { ); }; - const store = createStore(reducers) - const rootElement = document.getElementById("linkcollect-target"); - const root = createRoot(rootElement); - root.render( - - - - - - - - ); - - +const store = createStore(reducers); +const rootElement = document.getElementById("linkcollect-target"); +const root = createRoot(rootElement); +root.render( + + + + + + + +); diff --git a/src/reducers/authReducers.js b/src/reducers/authReducers.js index 8d2f701..6e33b9a 100644 --- a/src/reducers/authReducers.js +++ b/src/reducers/authReducers.js @@ -1,7 +1,7 @@ import { AUTH_SUCCESS, AUTH_START, AUTH_FAILURE, AUTH_LOGOUT } from "../constants/authConstants"; const initilaState = { token:"", - user:"", + user:{}, loading:false, error:false } @@ -15,10 +15,11 @@ const authReducer = (state=initilaState,action) => { error:false } case AUTH_SUCCESS : + console.log(data.user) return { ...state, token:data.token, - userId:data.userId, + user:data.user, loading:false, } case AUTH_FAILURE : diff --git a/src/utils/utilty.js b/src/utils/utilty.js index 6dd17d5..977f9b5 100644 --- a/src/utils/utilty.js +++ b/src/utils/utilty.js @@ -7,4 +7,10 @@ export const getOrigin = (weblink) =>{ console.log(weblink) const url = new URL(weblink); return url.host +} + +export const sortByLatestUpdated = (data)=>{ + const sorteData = data.sort((data1,data2)=>new Date(data2.updatedAt)-new Date(data1.updatedAt)); + console.log(sorteData) + return sorteData; } \ No newline at end of file From 8856b29dd0c035d007de0e29d640d0f306c1e68b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 19 Apr 2023 18:37:09 +0530 Subject: [PATCH 084/112] Minor bug fixing --- src/Components/BookmarkItem/BookmarkItem.js | 10 +++++----- src/Components/CollectiionItem/CollectionItem.js | 5 +++-- src/Components/Input/Input.js | 12 +++++++----- src/Components/Loader/PageLoader.js | 4 ++-- src/Components/Menu/PopupMenu.js | 5 +++-- src/Components/NoResult/NoResult.js | 6 +++--- src/Components/Tooltip/Tooltip.js | 15 ++++++++++++++- src/Screens/Bookmarks.js | 11 ++++++----- src/Screens/EditCollection.js | 9 +++++---- src/Screens/Home.js | 15 ++++++++++----- src/Screens/NewCollection.js | 6 +++++- src/assets/Branding/Logo4.svg | 5 +++++ src/assets/Icons/edit.svg | 4 ++-- src/assets/Icons/opentabs.svg | 4 ++-- src/utils/utilty.js | 4 ++-- tailwind.config.js | 3 ++- 16 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 src/assets/Branding/Logo4.svg diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js index d42b058..e64ff63 100644 --- a/src/Components/BookmarkItem/BookmarkItem.js +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -7,8 +7,8 @@ import Loader from "../Loader/Loader"; import CopyIcon from "../../assets/Icons/copyLight.svg"; import DeleteIcon from "../../assets/Icons/delete.svg"; import ShareIcon from "../../assets/Icons/arrow-share.svg"; -import logo from "../../assets/Logo.svg"; import approveWhite from "../../assets/approve-white.svg" +import logo4 from "../../assets/Branding/Logo4.svg" import { getOrigin, nameShortner } from "../../utils/utilty"; @@ -40,11 +40,11 @@ const BookmarkItem = ({ id, favicon, name, url, onDelete }) => {
    - + -
    +

    - {nameShortner(name)} + {nameShortner(name,26)}

    {getOrigin(url)} @@ -66,7 +66,7 @@ const BookmarkItem = ({ id, favicon, name, url, onDelete }) => { to={url} target="_blank" > - + diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index 210d259..865fc99 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -9,6 +9,7 @@ import Loader from "../Loader/Loader"; import approve from "../../assets/Icons/approve.svg" import approveWhite from "../../assets/approve-white.svg" import { useSelector } from "react-redux"; +import { nameShortner } from "../../utils/utilty"; const CollectionItem = ({ image, name, @@ -55,7 +56,7 @@ const CollectionItem = ({

    -

    {name}

    +

    {nameShortner(name,15)}

    {count} Bookmarks

    @@ -79,7 +80,7 @@ const CollectionItem = ({ - + -
    +

    No {noResultName} Found! diff --git a/src/Components/Tooltip/Tooltip.js b/src/Components/Tooltip/Tooltip.js index f2b71f4..d002248 100644 --- a/src/Components/Tooltip/Tooltip.js +++ b/src/Components/Tooltip/Tooltip.js @@ -1,4 +1,4 @@ -import React, { Children, useRef } from "react"; +import React, { useRef } from "react"; const Tooltip = ({ name , children}) => { return ( @@ -13,4 +13,17 @@ const Tooltip = ({ name , children}) => { ); }; +export const ToolTip2 = ({name,children}) =>{ + return( +

    + {children} + + {name} + +
    + ) +} + export default Tooltip; diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 6ada7d8..7e9ed05 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -10,7 +10,7 @@ import BookmarkItem from "../Components/BookmarkItem/BookmarkItem"; import PopupMenu from "../Components/Menu/PopupMenu"; import NoResult from "../Components/NoResult/NoResult"; import Loader from "../Components/Loader/Loader"; -import Tooltip from "../Components/Tooltip/Tooltip"; +import { ToolTip2 } from "../Components/Tooltip/Tooltip"; import { getCurrentTab } from "../utils/chromeAPI"; @@ -18,6 +18,7 @@ import { deleteCollection, getCollection, togglePrivacy } from "../api/collectio import { deleteTimeline, createTimeline } from "../api/timelineService"; import { useSelector } from "react-redux"; import PageLoader from "../Components/Loader/PageLoader"; +import { nameShortner } from "../utils/utilty"; const Bookmarks = () => { const [showMenu, setShowMenu] = useState(false); @@ -142,11 +143,11 @@ const Bookmarks = () => {

    - {!isLoading &&
    + {!isLoading &&

    - {collection.title} + {collection.title && nameShortner(collection.title,30)}

    {collection.timelines?.length || 0} Bookmarks @@ -201,7 +202,7 @@ const Bookmarks = () => { {/* Add bookmark */}

    - + - +
    ) : ( diff --git a/src/Screens/EditCollection.js b/src/Screens/EditCollection.js index adbd7b0..060fee6 100644 --- a/src/Screens/EditCollection.js +++ b/src/Screens/EditCollection.js @@ -33,8 +33,8 @@ const EditCollection = () => { const handleSubmit = async (e) => { e.preventDefault(); - console.log(data) - if(data.title=== "" ) return + console.log(data.title.length) + if(data.title==="" || data.title.length>40 ) return setLoading(true); try{ const form = new FormData(); @@ -58,7 +58,7 @@ const EditCollection = () => {

    Editing Collection

    -
    +
    { inputClass="textClass" name="title" value={data.title} + required={40} /> + {data.title.length > 40 && Name length should be less than 40} { inputClass="textClass" name="description" value={data.description} + required={240} /> + {data.description.length > 240 && Name length should be less than 240} + + + + diff --git a/src/assets/Icons/edit.svg b/src/assets/Icons/edit.svg index 02890a0..950591b 100644 --- a/src/assets/Icons/edit.svg +++ b/src/assets/Icons/edit.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/assets/Icons/opentabs.svg b/src/assets/Icons/opentabs.svg index d181012..219a527 100644 --- a/src/assets/Icons/opentabs.svg +++ b/src/assets/Icons/opentabs.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/utils/utilty.js b/src/utils/utilty.js index 977f9b5..4174689 100644 --- a/src/utils/utilty.js +++ b/src/utils/utilty.js @@ -1,6 +1,6 @@ // get current tab info -export const nameShortner = (name) => { - return name.slice(0,11)+"..." +export const nameShortner = (name,length) => { + return name.length > length ? name.slice(0,length)+"..." : name } //Getting original from any website links export const getOrigin = (weblink) =>{ diff --git a/tailwind.config.js b/tailwind.config.js index b8daa4a..772237e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -16,7 +16,8 @@ module.exports = { textPrimary:"#232438", textSecondary:"#636472", textLight:"#f6f6f6", - success:"#62b560" + success:"#62b560", + danger:"#ff0000" } }, From f6e9d9c6e5a0228c04aea8c284ce4d52e8df05ee Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 19 Apr 2023 19:23:16 +0530 Subject: [PATCH 085/112] Spellling update --- src/Screens/Bookmarks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 7e9ed05..acde232 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -202,7 +202,7 @@ const Bookmarks = () => { {/* Add bookmark */}
    - + diff --git a/src/background/background.js b/src/background/background.js index 9a2064a..c3dc70b 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -1,9 +1,7 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const activeTab=tabs[0]; - console.log(activeTab) if(activeTab?.url==="http://localhost:3000/"){ - console.log("back message") chrome.tabs.sendMessage(tabId,{ message:"LOGIN_SUCCESS" }) @@ -12,7 +10,6 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { if (request.method == "getStatus"){ - console.log("hello") sendResponse({status: localStorage['token']}); } else diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 297f04f..17113d6 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -8,5 +8,4 @@ chrome.runtime.onMessage.addListener((request)=>{ } }) -console.log("Hello") diff --git a/src/popup.jsx b/src/popup.jsx index df50491..419cd9c 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -22,14 +22,11 @@ import PageLoader from "./Components/Loader/PageLoader"; const Popup = () => { const dispatch = useDispatch(); const authState = useSelector((state) => state.auth); - console.log(authState); useEffect(() => { chrome.storage.local.get(["token"], async (res) => { if (res.token) { dispatch(authStart()); - console.log("hello", res.token); const response = jwt_decode(res.token); - console.log(response); dispatch( authSuccess({ token: res.token, @@ -43,7 +40,6 @@ const Popup = () => { useEffect(() => { function init() { if (authState.token) { - console.log(authState.token); setJwtInRequestHeader(authState.token); } } @@ -51,7 +47,6 @@ const Popup = () => { init(); }, [authState.token]); - console.log(authState); if (authState.loading) { return "Loading.."; diff --git a/src/reducers/authReducers.js b/src/reducers/authReducers.js index 6e33b9a..c93627e 100644 --- a/src/reducers/authReducers.js +++ b/src/reducers/authReducers.js @@ -15,7 +15,6 @@ const authReducer = (state=initilaState,action) => { error:false } case AUTH_SUCCESS : - console.log(data.user) return { ...state, token:data.token, diff --git a/src/utils/utilty.js b/src/utils/utilty.js index 4174689..417a993 100644 --- a/src/utils/utilty.js +++ b/src/utils/utilty.js @@ -4,13 +4,11 @@ export const nameShortner = (name,length) => { } //Getting original from any website links export const getOrigin = (weblink) =>{ - console.log(weblink) const url = new URL(weblink); return url.host } export const sortByLatestUpdated = (data)=>{ const sorteData = data.sort((data1,data2)=>new Date(data2.updatedAt)-new Date(data1.updatedAt)); - console.log(sorteData) return sorteData; } \ No newline at end of file From 116e68c16d703053b4c056366beb0e5b0022c910 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 19 Apr 2023 19:58:27 +0530 Subject: [PATCH 089/112] Warning fixed --- src/Components/Loader/PageLoader.js | 12 ++++++------ src/Components/Menu/PopupMenu.js | 2 +- src/Components/Menu/SideMenu.js | 2 +- src/Components/SearchBox/SearchBox.js | 16 ++++++++-------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Components/Loader/PageLoader.js b/src/Components/Loader/PageLoader.js index 0835d31..7900d36 100644 --- a/src/Components/Loader/PageLoader.js +++ b/src/Components/Loader/PageLoader.js @@ -29,7 +29,7 @@ const PageLoader = () => {
    { >
    -

    {name}

    +

    {name}

    ); }; diff --git a/src/Components/Menu/PopupMenu.js b/src/Components/Menu/PopupMenu.js index e6e93ab..4212861 100644 --- a/src/Components/Menu/PopupMenu.js +++ b/src/Components/Menu/PopupMenu.js @@ -7,7 +7,7 @@ import { Link } from "react-router-dom"; import deleteI from "../../assets/Icons/delete.svg" import openLink from "../../assets/Icons/openLink.svg" import openTabs from "../../assets/Icons/opentabs.svg" -const PopupMenu =React.forwardRef( ({ title,privacy,collectionId,onCopyCollection, collectionLink , onDelete,onOpenAllLink}) => { +const PopupMenu =React.forwardRef( ({ title,privacy,collectionId,onCopyCollection, collectionLink , onDelete,onOpenAllLink},ref) => { const copyImageRef = useRef(); const copyLinkHandler = () => { if (copyImageRef) copyImageRef.current.src = approve; diff --git a/src/Components/Menu/SideMenu.js b/src/Components/Menu/SideMenu.js index 3e0df1c..35a3e79 100644 --- a/src/Components/Menu/SideMenu.js +++ b/src/Components/Menu/SideMenu.js @@ -18,7 +18,7 @@ const MenuItem = ({ name, icon, onCLickHandler, link }) => { ); }; -const SideMenu = React.forwardRef(({ onLogout, isOpen, navref }) => { +const SideMenu = React.forwardRef(({ onLogout, isOpen },ref) => { const auth = useSelector(state=>state.auth); const menuList = [ { diff --git a/src/Components/SearchBox/SearchBox.js b/src/Components/SearchBox/SearchBox.js index 2db5f37..3c38a65 100644 --- a/src/Components/SearchBox/SearchBox.js +++ b/src/Components/SearchBox/SearchBox.js @@ -2,30 +2,30 @@ import React from "react"; import filterMenu from "../../assets/Icons/filter--menu.svg" const SearchBox = ({onSearch}) => { return ( -
    -
    + -
    -
    +
    +
    From e39409ffe4faa897cbff9cc690a83d7cd33e1acd Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Wed, 19 Apr 2023 23:04:11 +0530 Subject: [PATCH 090/112] Save alll tabs fuctions added and minor bug fixing --- public/manifest.json | 3 +- src/Screens/Home.js | 4 +- src/api/timelineService.js | 7 +++ src/background/background.js | 82 ++++++++++++++++++++++++++++++------ src/popup.jsx | 3 +- src/utils/chromeAPI.js | 3 ++ src/utils/utilty.js | 2 +- 7 files changed, 87 insertions(+), 17 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index c3e349b..7fa0b3c 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,8 +1,9 @@ + { "name": "LinkCollect", "version": "0.1.0", "description": "More than A Bookmark", - "permissions": ["storage", "tabs","scripting","activeTab"], + "permissions": ["storage", "tabs","scripting","activeTab","contextMenus","notifications"], "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","http://*/*"], "background": { "service_worker": "background.js" diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 9356ede..27cecd9 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -8,7 +8,7 @@ import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; import NoResult from "../Components/NoResult/NoResult"; import Loader from "../Components/Loader/Loader"; import PageLoader from "../Components/Loader/PageLoader"; -import { getCurrentTab } from "../utils/chromeAPI"; +import { getCurrentTab, upadteLatestCollection } from "../utils/chromeAPI"; import { createTimeline } from "../api/timelineService"; import { sortByLatestUpdated } from "../utils/utilty"; @@ -37,6 +37,7 @@ const Home = () => { SetCollections(sorteData); setFiltererdCollection(sorteData); setLoadeing(false) + await upadteLatestCollection(sorteData[0]._id,sorteData[0].title) } catch (error) { setLoadeing(false); @@ -63,6 +64,7 @@ const Home = () => { updatedCollections[collectionIndex].timelines.push(data._id); SetCollections(updatedCollections); setFiltererdCollection(updatedCollections); + await upadteLatestCollection(updatedCollections[collectionIndex]._id,updatedCollections[collectionIndex].title) } catch (error) { // Need to provide a error message console.log(error); diff --git a/src/api/timelineService.js b/src/api/timelineService.js index 31ee133..1945ed8 100644 --- a/src/api/timelineService.js +++ b/src/api/timelineService.js @@ -11,3 +11,10 @@ export function createTimeline(collectionId, timeline) { export function deleteTimeline(collectionId, timelineId) { return http.delete(`${apiEndpoint}/${collectionId}/timelines/${timelineId}`); } + +// ---------------------------------- SPECIAL ROUTE -------------------------------------- // + +// for multiple timelines/links creation from left click +export function createMultipleTimelines(collectionId, timelinesArray) { + return http.post(`${apiEndpoint}/${collectionId}/timelines/create-multiple`, timelinesArray); +} \ No newline at end of file diff --git a/src/background/background.js b/src/background/background.js index c3dc70b..2a517c2 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -1,17 +1,73 @@ +const api = "http://localhost:7000/api/v1/collections"; + chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { - const activeTab=tabs[0]; - if(activeTab?.url==="http://localhost:3000/"){ - chrome.tabs.sendMessage(tabId,{ - message:"LOGIN_SUCCESS" - }) + const activeTab = tabs[0]; + // Change : Need to change the click while uploading + if (activeTab?.url === "http://localhost:3000/") { + chrome.tabs.sendMessage(tabId, { + message: "LOGIN_SUCCESS", + }); } -})}) + }); +}); -chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { - if (request.method == "getStatus"){ - sendResponse({status: localStorage['token']}); - } - else - sendResponse({}); // snub them. -}); \ No newline at end of file +// let collectionId = "" +// let collectionName = "" + +// chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { +// console.log(request) +// if (request.method == "getStatus"){ +// sendResponse({status: localStorage['token']}); +// } + +// else +// sendResponse({}); // snub them. +// }); + +chrome.contextMenus.create({ + id: "linkcollect-12", + title: "Save all tabs to recent", + contexts: ["page"], +}); + +chrome.contextMenus.onClicked.addListener(async (item, tab) => { + const data = await chrome.storage.local.get(["collection"]); + const token = await chrome.storage.local.get(["token"]); + const tabs = await chrome.tabs.query({}); + const structuredTimeLines = tabs.map(structureTimeline); + try { + const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { + method: "POST", + headers: { + "Content-type": "application/json", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: JSON.stringify(structuredTimeLines), + + }) + createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") + } catch (error) { + + } + +}); + +const createNotification = (title,message) =>{ + chrome.notifications.create({ + title:title, + message:message, + iconUrl: "./logo.png", + type:"basic" + }) +} + +const structureTimeline = (tab) => { + const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); + return { + link: tab.url, + title: tab.title, + favicon: tab.favIconUrl, + time, + }; +}; diff --git a/src/popup.jsx b/src/popup.jsx index 419cd9c..e527ff8 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -17,13 +17,13 @@ import { authStart, authSuccess } from "./actions/authActions"; import { createStore } from "redux"; import { setJwtInRequestHeader } from "./api/httpService"; import jwt_decode from "jwt-decode"; -import PageLoader from "./Components/Loader/PageLoader"; const Popup = () => { const dispatch = useDispatch(); const authState = useSelector((state) => state.auth); useEffect(() => { chrome.storage.local.get(["token"], async (res) => { + if (res.token) { dispatch(authStart()); const response = jwt_decode(res.token); @@ -47,6 +47,7 @@ const Popup = () => { init(); }, [authState.token]); + if (authState.loading) { return "Loading.."; diff --git a/src/utils/chromeAPI.js b/src/utils/chromeAPI.js index 5dd3cfd..3989118 100644 --- a/src/utils/chromeAPI.js +++ b/src/utils/chromeAPI.js @@ -5,4 +5,7 @@ export const getCurrentTab = async () =>{ export const getLocalData = async (key1,...rest) =>{ const values = await chrome.storage.local.get([key1]) return values; +} +export const upadteLatestCollection =async (id,collectionName) =>{ + await chrome.storage.local.set({collection:{id:id,collectionName:collectionName}}) } \ No newline at end of file diff --git a/src/utils/utilty.js b/src/utils/utilty.js index 417a993..f3ac667 100644 --- a/src/utils/utilty.js +++ b/src/utils/utilty.js @@ -11,4 +11,4 @@ export const getOrigin = (weblink) =>{ export const sortByLatestUpdated = (data)=>{ const sorteData = data.sort((data1,data2)=>new Date(data2.updatedAt)-new Date(data1.updatedAt)); return sorteData; -} \ No newline at end of file +} From bed916b510bdcb3042e26c6d12c0c450a0940be8 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 01:35:51 +0530 Subject: [PATCH 091/112] Prod chnage comments --- public/manifest.json | 4 +- src/Screens/Home.js | 1 + src/Screens/Splash.js | 1 + src/background/background.js | 110 +++++++++++++++++++++++++++++------ src/popup.jsx | 1 + 5 files changed, 97 insertions(+), 20 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index 7fa0b3c..4ca021f 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -4,7 +4,7 @@ "version": "0.1.0", "description": "More than A Bookmark", "permissions": ["storage", "tabs","scripting","activeTab","contextMenus","notifications"], - "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","http://*/*"], + "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","https://*/*"], "background": { "service_worker": "background.js" }, @@ -17,7 +17,7 @@ }, "content_scripts": [ { - "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","http://*/*"], + "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","https://*/*"], "js": ["contentScript.js"] } ], diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 27cecd9..baf4a53 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -34,6 +34,7 @@ const Home = () => { try { const res = await getAllCollectionsWithoutTimelines(); const sorteData = sortByLatestUpdated(res.data.data); + console.log(sorteData) SetCollections(sorteData); setFiltererdCollection(sorteData); setLoadeing(false) diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index 1ca5c4a..698eb4b 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -11,6 +11,7 @@ const Splash = () => { //update the state and redirect to the home }else{ + // PROD CHANGE : url : https://linkcollect.io/login chrome.tabs.create({ url:"http://localhost:3000/" }) diff --git a/src/background/background.js b/src/background/background.js index 2a517c2..755a875 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -1,10 +1,14 @@ + const api = "http://localhost:7000/api/v1/collections"; chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const activeTab = tabs[0]; + console.log(activeTab) // Change : Need to change the click while uploading + // PROD Change : url https://linkcollect.io/ ==> now, when other pages upadte other url https://linkcollect.io/username if (activeTab?.url === "http://localhost:3000/") { + console.log("Hello") chrome.tabs.sendMessage(tabId, { message: "LOGIN_SUCCESS", }); @@ -25,33 +29,103 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { // sendResponse({}); // snub them. // }); +// Chnage: contextmenu way +// chrome.runtime.onInstalled.addListener(async () => { + // await chrome.storage.local.set({"tab-session":0}) + chrome.contextMenus.create({ + id: "linkcollect-12", + title: "Save to Linkcollect", + contexts: ["page"], + }); +// }); + + +chrome.contextMenus.create({ + title: "Save All tabs", + parentId: "linkcollect-12", + id:"Save-All-tabs-linkcollect", + contexts:["page"], +}); + chrome.contextMenus.create({ - id: "linkcollect-12", - title: "Save all tabs to recent", - contexts: ["page"], + title: "Save this tab to recent collection", + parentId: "linkcollect-12", + id:"Save-this-tab-to-recent-collection-linkcollect", + contexts:["page"], }); + chrome.contextMenus.onClicked.addListener(async (item, tab) => { + if(item.menuItemId === "Save-All-tabs-linkcollect"){ + await saveAlltabs() + }else{ + await saveCurrentTab() + } +}) + +const saveCurrentTab = async () => { + const data = await chrome.storage.local.get(["collection"]); + const token = await chrome.storage.local.get(["token"]); + const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); + const structuredTimeLine = structureTimeline(tabs[0]); + console.log(structureTimeline) + // try { + // const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { + // method: "POST", + // headers: { + // "Content-type": "application/json", + // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + // }, + // body: JSON.stringify(structuredTimeLine), + + // }) + // createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") + // } catch (error) { + // createNotification(`Unable to add!`,"May be try again later!!") + // } + +} + + +const saveAlltabs = async () => { const data = await chrome.storage.local.get(["collection"]); const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({}); - const structuredTimeLines = tabs.map(structureTimeline); - try { - const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { - method: "POST", - headers: { - "Content-type": "application/json", - Authorization: `Bearer ${token.token}`, // notice the Bearer before your token - }, - body: JSON.stringify(structuredTimeLines), + const username = await chrome.storage.local.get(["username"]); + const currentTabSession = await chrome.storage.local.get(["tab-session"]); + console.log(username,currentTabSession,token,data) + const structuredTimelines = structureTimeline(tabs); + // try { + // //1. Need to create new collection + // const form = new FormData(); + // form.append("title",currentTabSession); + // form.append("description",data.description); + // form.append("privacy",data.privacy); + // const collection = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { + // method: "POST", + // headers: { + // "Content-type": "application/json", + // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + // }, + // body: JSON.stringify(structuredTimelines), - }) - createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") - } catch (error) { - - } + // }) + + // const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { + // method: "POST", + // headers: { + // "Content-type": "application/json", + // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + // }, + // body: JSON.stringify(structuredTimelines), + + // }) + // createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") + // } catch (error) { + // createNotification(`Unable to add!`,"May be try again later!!") + // } -}); +} const createNotification = (title,message) =>{ chrome.notifications.create({ diff --git a/src/popup.jsx b/src/popup.jsx index e527ff8..115ecbc 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -27,6 +27,7 @@ const Popup = () => { if (res.token) { dispatch(authStart()); const response = jwt_decode(res.token); + await chrome.storage.local.set({username:response.username}) dispatch( authSuccess({ token: res.token, From 62fba7c72b37a25814d268a6104bc8a802d2d12b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 02:33:48 +0530 Subject: [PATCH 092/112] Conetxt menu done --- src/background/background.js | 87 +++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/src/background/background.js b/src/background/background.js index 755a875..7a92b5c 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -69,20 +69,20 @@ const saveCurrentTab = async () => { const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); const structuredTimeLine = structureTimeline(tabs[0]); console.log(structureTimeline) - // try { - // const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { - // method: "POST", - // headers: { - // "Content-type": "application/json", - // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token - // }, - // body: JSON.stringify(structuredTimeLine), + try { + const res = await fetch(`${api}/${data.collection.id}/timelines`, { + method: "POST", + headers: { + "Content-type": "application/json", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: JSON.stringify(structuredTimeLine), - // }) - // createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") - // } catch (error) { - // createNotification(`Unable to add!`,"May be try again later!!") - // } + }) + createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") + } catch (error) { + createNotification(`Unable to add!`,"May be try again later!!") + } } @@ -93,37 +93,40 @@ const saveAlltabs = async () => { const tabs = await chrome.tabs.query({}); const username = await chrome.storage.local.get(["username"]); const currentTabSession = await chrome.storage.local.get(["tab-session"]); - console.log(username,currentTabSession,token,data) - const structuredTimelines = structureTimeline(tabs); - // try { - // //1. Need to create new collection - // const form = new FormData(); - // form.append("title",currentTabSession); - // form.append("description",data.description); - // form.append("privacy",data.privacy); - // const collection = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { - // method: "POST", - // headers: { - // "Content-type": "application/json", - // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token - // }, - // body: JSON.stringify(structuredTimelines), + console.log(username,currentTabSession["tab-session"],token,data) + const structuredTimelines = tabs.map(structureTimeline); + try { + //1. Need to create new collection + let tabSessionNum =currentTabSession["tab-session"]+1; + const form = new FormData(); + console.log(tabSessionNum) + form.append("title",`tabs session ${tabSessionNum}`); + const collection = await fetch(`${api}`, { + method: "POST", + headers: { + // "Content-type": "application/x-www-form-urlencoded", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: form, - // }) - - // const res = await fetch(`${api}/${data.collection.id}/timelines/create-multiple`, { - // method: "POST", - // headers: { - // "Content-type": "application/json", - // Authorization: `Bearer ${token.token}`, // notice the Bearer before your token - // }, - // body: JSON.stringify(structuredTimelines), + }) + const collectionData = await collection.json(); + + const res = await fetch(`${api}/${collectionData.data._id}/timelines/create-multiple`, { + method: "POST", + headers: { + "Content-type": "application/json", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: JSON.stringify(structuredTimelines), - // }) - // createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") - // } catch (error) { - // createNotification(`Unable to add!`,"May be try again later!!") - // } + }) + console.log(res) + await chrome.storage.local.set({"tab-session":tabSessionNum}) + createNotification(`Added all tabs to ${collectionData.data.title}`,"See in the Linkcollect extension") + } catch (error) { + createNotification(`Unable to add!`,"May be try again later!!") + } } From f885db3bcb3e66752ec8c84b8b29f156bb15b9ff Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 02:36:37 +0530 Subject: [PATCH 093/112] On install storage update --- src/background/background.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/background/background.js b/src/background/background.js index 7a92b5c..b00e68b 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -30,14 +30,14 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { // }); // Chnage: contextmenu way -// chrome.runtime.onInstalled.addListener(async () => { - // await chrome.storage.local.set({"tab-session":0}) +chrome.runtime.onInstalled.addListener(async () => { + await chrome.storage.local.set({"tab-session":0}) chrome.contextMenus.create({ id: "linkcollect-12", title: "Save to Linkcollect", contexts: ["page"], }); -// }); +}); chrome.contextMenus.create({ From 8bf9fb1f1ec8179e108705b8cb7515df91a0b5f3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 19:06:14 +0530 Subject: [PATCH 094/112] hotkeys added for saving --- public/manifest.json | 101 ++++++++++++++-------- src/background/background.js | 161 +++++++++++++++++------------------ src/popup.jsx | 1 - 3 files changed, 145 insertions(+), 118 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index 4ca021f..fd33f3b 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,38 +1,67 @@ - { - "name": "LinkCollect", - "version": "0.1.0", - "description": "More than A Bookmark", - "permissions": ["storage", "tabs","scripting","activeTab","contextMenus","notifications"], - "host_permissions": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","https://*/*"], - "background": { - "service_worker": "background.js" + "name": "LinkCollect", + "version": "0.1.0", + "description": "More than A Bookmark", + "permissions": [ + "storage", + "tabs", + "scripting", + "activeTab", + "contextMenus", + "notifications" + ], + "host_permissions": [ + "https://*.youtube.com/*", + "https://*.twitter.com/*", + "https://*.linkedin.com/*", + "http://*/*", + "https://*/*" + ], + "background": { + "service_worker": "background.js" + }, + "commands": { + "save-current-tab": { + "suggested_key": "Ctrl+Shift+L", + "description": "Inject a script on the page" }, - "icons":{ - "16":"logo.png", - "19":"logo.png", - "32":"logo.png", - "48":"logo.png", - "128":"logo.png" - }, - "content_scripts": [ - { - "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*","http://*/*","https://*/*"], - "js": ["contentScript.js"] - } - ], - "web_accessible_resources": [ - { - "resources": [ - "assets/bookmark.png" - ], - "matches": ["https://*.youtube.com/*","https://*.twitter.com/*","https://*.linkedin.com/*"] - } - ], - "action": { - "default_title": "LinkCollect", - "default_popup": "popup.html" - }, - "manifest_version": 3 - } - \ No newline at end of file + "save-all-tabs": { + "suggested_key": "Ctrl+Shift+K", + "description": "Inject a script on the page" + } + }, + "icons": { + "16": "logo.png", + "19": "logo.png", + "32": "logo.png", + "48": "logo.png", + "128": "logo.png" + }, + "content_scripts": [ + { + "matches": [ + "https://*.youtube.com/*", + "https://*.twitter.com/*", + "https://*.linkedin.com/*", + "http://*/*", + "https://*/*" + ], + "js": ["contentScript.js"] + } + ], + "web_accessible_resources": [ + { + "resources": ["assets/bookmark.png","logo.png"], + "matches": [ + "https://*.youtube.com/*", + "https://*.twitter.com/*", + "https://*.linkedin.com/*" + ] + } + ], + "action": { + "default_title": "LinkCollect", + "default_popup": "popup.html" + }, + "manifest_version": 3 +} diff --git a/src/background/background.js b/src/background/background.js index b00e68b..9dfbe8b 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -1,14 +1,14 @@ - +// PROD: API URL CHANGE const api = "http://localhost:7000/api/v1/collections"; chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const activeTab = tabs[0]; - console.log(activeTab) + console.log(activeTab); // Change : Need to change the click while uploading // PROD Change : url https://linkcollect.io/ ==> now, when other pages upadte other url https://linkcollect.io/username if (activeTab?.url === "http://localhost:3000/") { - console.log("Hello") + console.log("Hello"); chrome.tabs.sendMessage(tabId, { message: "LOGIN_SUCCESS", }); @@ -16,60 +16,57 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { }); }); -// let collectionId = "" -// let collectionName = "" - -// chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { -// console.log(request) -// if (request.method == "getStatus"){ -// sendResponse({status: localStorage['token']}); -// } - -// else -// sendResponse({}); // snub them. -// }); - -// Chnage: contextmenu way chrome.runtime.onInstalled.addListener(async () => { - await chrome.storage.local.set({"tab-session":0}) + await chrome.storage.local.set({ "tab-session": 0 }); chrome.contextMenus.create({ - id: "linkcollect-12", - title: "Save to Linkcollect", - contexts: ["page"], + id: "linkcollect-12", + title: "Save to Linkcollect", + contexts: ["page"], + }); + chrome.contextMenus.create({ + title: "Save All tabs", + parentId: "linkcollect-12", + id: "save-all-tabs", + contexts: ["page"], }); -}); - -chrome.contextMenus.create({ - title: "Save All tabs", - parentId: "linkcollect-12", - id:"Save-All-tabs-linkcollect", - contexts:["page"], + chrome.contextMenus.create({ + title: "Save this tab to recent collection", + parentId: "linkcollect-12", + id: "save-current-tab", + contexts: ["page"], + }); }); -chrome.contextMenus.create({ - title: "Save this tab to recent collection", - parentId: "linkcollect-12", - id:"Save-this-tab-to-recent-collection-linkcollect", - contexts:["page"], +// Context menu click listeners +chrome.contextMenus.onClicked.addListener(async (item, tab) => { + await acionDistaptcher(item.menuItemId); }); +// Commands listeners +chrome.commands.onCommand.addListener(async (command) => { + await acionDistaptcher(command); +}); -chrome.contextMenus.onClicked.addListener(async (item, tab) => { - if(item.menuItemId === "Save-All-tabs-linkcollect"){ - await saveAlltabs() - }else{ - await saveCurrentTab() +// API Action creator based on event +const acionDistaptcher = async (name) => { + switch (name) { + case "save-current-tab": + await saveCurrentTab(); + break; + case "save-all-tabs": + await saveAlltabs(); + break; } -}) +}; -const saveCurrentTab = async () => { +// Saving the current tab to the latest collection +const saveCurrentTab = async () => { const data = await chrome.storage.local.get(["collection"]); const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); const structuredTimeLine = structureTimeline(tabs[0]); - console.log(structureTimeline) - try { + try { const res = await fetch(`${api}/${data.collection.id}/timelines`, { method: "POST", headers: { @@ -77,67 +74,69 @@ const saveCurrentTab = async () => { Authorization: `Bearer ${token.token}`, // notice the Bearer before your token }, body: JSON.stringify(structuredTimeLine), - - }) - createNotification(`Added all tabs to ${data.collection.name}`,"See in the Linkcollect extension") + }); + createNotification( + `Added all tabs to ${data.collection.collectionName}`, + "See in the Linkcollect extension" + ); } catch (error) { - createNotification(`Unable to add!`,"May be try again later!!") + createNotification(`Unable to add!`, "May be try again later!!"); } - -} - +}; -const saveAlltabs = async () => { - const data = await chrome.storage.local.get(["collection"]); +//Save all tabs +const saveAlltabs = async () => { const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({}); - const username = await chrome.storage.local.get(["username"]); const currentTabSession = await chrome.storage.local.get(["tab-session"]); - console.log(username,currentTabSession["tab-session"],token,data) const structuredTimelines = tabs.map(structureTimeline); - try { + try { //1. Need to create new collection - let tabSessionNum =currentTabSession["tab-session"]+1; + let tabSessionNum = currentTabSession["tab-session"] + 1; const form = new FormData(); - console.log(tabSessionNum) - form.append("title",`tabs session ${tabSessionNum}`); + console.log(tabSessionNum); + form.append("title", `tabs session ${tabSessionNum}`); const collection = await fetch(`${api}`, { method: "POST", headers: { // "Content-type": "application/x-www-form-urlencoded", - Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token }, body: form, - - }) + }); const collectionData = await collection.json(); - const res = await fetch(`${api}/${collectionData.data._id}/timelines/create-multiple`, { - method: "POST", - headers: { - "Content-type": "application/json", - Authorization: `Bearer ${token.token}`, // notice the Bearer before your token - }, - body: JSON.stringify(structuredTimelines), - - }) - console.log(res) - await chrome.storage.local.set({"tab-session":tabSessionNum}) - createNotification(`Added all tabs to ${collectionData.data.title}`,"See in the Linkcollect extension") + // 2. Now add all tabs + const res = await fetch( + `${api}/${collectionData.data._id}/timelines/create-multiple`, + { + method: "POST", + headers: { + "Content-type": "application/json", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: JSON.stringify(structuredTimelines), + } + ); + console.log(res); + await chrome.storage.local.set({ "tab-session": tabSessionNum }); + createNotification( + `Added all tabs to ${collectionData.data.title}`, + "See in the Linkcollect extension" + ); } catch (error) { - createNotification(`Unable to add!`,"May be try again later!!") + createNotification(`Unable to add!`, "May be try again later!!"); } - -} +}; -const createNotification = (title,message) =>{ +const createNotification = (title, message) => { chrome.notifications.create({ - title:title, - message:message, + title: title, + message: message, iconUrl: "./logo.png", - type:"basic" - }) -} + type: "basic", + }); +}; const structureTimeline = (tab) => { const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); diff --git a/src/popup.jsx b/src/popup.jsx index 115ecbc..e527ff8 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -27,7 +27,6 @@ const Popup = () => { if (res.token) { dispatch(authStart()); const response = jwt_decode(res.token); - await chrome.storage.local.set({username:response.username}) dispatch( authSuccess({ token: res.token, From f04902905d9cb65798b3591eb9e804a4d71484c7 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 19:56:59 +0530 Subject: [PATCH 095/112] Link limit update --- src/Components/BookmarkItem/BookmarkItem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/BookmarkItem/BookmarkItem.js b/src/Components/BookmarkItem/BookmarkItem.js index e64ff63..48ccfd7 100644 --- a/src/Components/BookmarkItem/BookmarkItem.js +++ b/src/Components/BookmarkItem/BookmarkItem.js @@ -47,7 +47,7 @@ const BookmarkItem = ({ id, favicon, name, url, onDelete }) => { {nameShortner(name,26)}

    - {getOrigin(url)} + {nameShortner(getOrigin(url),22)}

    From a23a8c187fc0e0833fd33fb77213490fc7ae1641 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 20:00:28 +0530 Subject: [PATCH 096/112] Design fix --- src/Screens/EditCollection.js | 4 ++-- src/Screens/NewCollection.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Screens/EditCollection.js b/src/Screens/EditCollection.js index ae6ba22..b06a1a7 100644 --- a/src/Screens/EditCollection.js +++ b/src/Screens/EditCollection.js @@ -55,7 +55,7 @@ const EditCollection = () => {

    Editing Collection

    -
    +
    { /> {data.title.length > 40 && Name length should be less than 40} { onInputHandler={onInputFile} inputClass="fileClass" /> +
    -
    ); From 20ea2a7a857ed18ee7f2a5c9ee250451d72babc3 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 20:16:42 +0530 Subject: [PATCH 097/112] Link update --- src/Components/Menu/SideMenu.js | 4 ++-- src/Components/Navbar/Navbar.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Components/Menu/SideMenu.js b/src/Components/Menu/SideMenu.js index 35a3e79..0ab37ff 100644 --- a/src/Components/Menu/SideMenu.js +++ b/src/Components/Menu/SideMenu.js @@ -29,12 +29,12 @@ const SideMenu = React.forwardRef(({ onLogout, isOpen },ref) => { { name: "View Commands", icon: command, - link: "https://www.linkcollect.io/commands", + link: "https://linkcollect.super.site/commands", }, { name: "Help", icon: help, - link: "https://www.linkcollect.io/help", + link: "https://linkcollect.super.site/help", }, { name: "Logout", diff --git a/src/Components/Navbar/Navbar.js b/src/Components/Navbar/Navbar.js index a99228c..36021e3 100644 --- a/src/Components/Navbar/Navbar.js +++ b/src/Components/Navbar/Navbar.js @@ -30,9 +30,9 @@ const Navbar = () => { return (
    - +
    setShow(prevState=>!prevState)}> From 8b142cfbe334e6488e05d5029d46cb5248b9ebee Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Thu, 20 Apr 2023 20:47:05 +0530 Subject: [PATCH 098/112] favicon added --- public/favicon.png | Bin 0 -> 2062 bytes public/logo.png | Bin 2002 -> 0 bytes public/manifest.json | 16 ++++++++-------- 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 public/favicon.png delete mode 100644 public/logo.png diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..28f35725e051ce9f8ca68739855f2d850bbbffa3 GIT binary patch literal 2062 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 Date: Fri, 21 Apr 2023 02:05:47 +0530 Subject: [PATCH 099/112] Content script test --- src/background/background.js | 7 +++++++ src/contenScript/contentScript.js | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/background/background.js b/src/background/background.js index 9dfbe8b..bdc3d55 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -127,6 +127,13 @@ const saveAlltabs = async () => { } catch (error) { createNotification(`Unable to add!`, "May be try again later!!"); } + chrome.tabs.query({ active: true, currentWindow: true },(tabs)=>{ + const activeTab = tabs[0]; + console.log(activeTab); + chrome.tabs.sendMessage(activeTab.id, { + message: "ALL_TABS_SAVED", + }); + }) }; const createNotification = (title, message) => { diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 17113d6..8850ec4 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -1,11 +1,16 @@ chrome.runtime.onMessage.addListener((request)=>{ + console.log("Running content script",request) if(request.message === "LOGIN_SUCCESS"){ token=localStorage.getItem("token") if(token){ chrome.storage.local.set({"token":token}); } } + console.log(request); + if(request.message === "ALL_TABS_SAVED"){ + console.log("Worked") + } }) From 64c7635077a919bc3e739354fd66b51f864da821 Mon Sep 17 00:00:00 2001 From: Brad Parbs Date: Fri, 21 Apr 2023 17:17:11 +0530 Subject: [PATCH 100/112] minor fixes --- src/background/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background/background.js b/src/background/background.js index bdc3d55..dff1baa 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -87,7 +87,7 @@ const saveCurrentTab = async () => { //Save all tabs const saveAlltabs = async () => { const token = await chrome.storage.local.get(["token"]); - const tabs = await chrome.tabs.query({}); + const tabs = await chrome.tabs.query({currentWindow: true}); const currentTabSession = await chrome.storage.local.get(["tab-session"]); const structuredTimelines = tabs.map(structureTimeline); try { From 2de0e473a7108ca5f9af4525e5c901b1353b198a Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 19:27:24 +0530 Subject: [PATCH 101/112] Browser toast created --- public/manifest.json | 19 ++--- src/background/background.js | 101 ++++++++++++++++--------- src/contenScript/approve.png | Bin 0 -> 803 bytes src/contenScript/contentScript.js | 122 +++++++++++++++++++++++++++--- src/contenScript/failed.png | Bin 0 -> 15326 bytes src/popup.css | 5 +- webpack.config.js | 6 +- 7 files changed, 190 insertions(+), 63 deletions(-) create mode 100644 src/contenScript/approve.png create mode 100644 src/contenScript/failed.png diff --git a/public/manifest.json b/public/manifest.json index 6678870..7ce0470 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -11,11 +11,7 @@ "notifications" ], "host_permissions": [ - "https://*.youtube.com/*", - "https://*.twitter.com/*", - "https://*.linkedin.com/*", - "http://*/*", - "https://*/*" + "" ], "background": { "service_worker": "background.js" @@ -40,22 +36,17 @@ "content_scripts": [ { "matches": [ - "https://*.youtube.com/*", - "https://*.twitter.com/*", - "https://*.linkedin.com/*", - "http://*/*", - "https://*/*" + "" ], + "css":["contentScript.css"], "js": ["contentScript.js"] } ], "web_accessible_resources": [ { - "resources": ["assets/bookmark.png"], + "resources": ["assets/bookmark.png","approve.png","failed.png"], "matches": [ - "https://*.youtube.com/*", - "https://*.twitter.com/*", - "https://*.linkedin.com/*" + "" ] } ], diff --git a/src/background/background.js b/src/background/background.js index bdc3d55..625331e 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -62,12 +62,12 @@ const acionDistaptcher = async (name) => { // Saving the current tab to the latest collection const saveCurrentTab = async () => { - const data = await chrome.storage.local.get(["collection"]); + const collection = await chrome.storage.local.get(["collection"]); const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); const structuredTimeLine = structureTimeline(tabs[0]); try { - const res = await fetch(`${api}/${data.collection.id}/timelines`, { + const res = await fetch(`${api}/${collection.collection.id}/timelines`, { method: "POST", headers: { "Content-type": "application/json", @@ -75,13 +75,15 @@ const saveCurrentTab = async () => { }, body: JSON.stringify(structuredTimeLine), }); - createNotification( - `Added all tabs to ${data.collection.collectionName}`, - "See in the Linkcollect extension" - ); + const data = await res.json(); + if (data.status >= 300 && data.status < 500) { + throw Error(); + } } catch (error) { - createNotification(`Unable to add!`, "May be try again later!!"); + console.log(error); + var hasError = true; } + sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); }; //Save all tabs @@ -89,7 +91,8 @@ const saveAlltabs = async () => { const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({}); const currentTabSession = await chrome.storage.local.get(["tab-session"]); - const structuredTimelines = tabs.map(structureTimeline); + const structuredTimelines = tabs.filter(filteredTimeline).map(structureTimeline); + console.log(structuredTimelines); try { //1. Need to create new collection let tabSessionNum = currentTabSession["tab-session"] + 1; @@ -106,6 +109,10 @@ const saveAlltabs = async () => { }); const collectionData = await collection.json(); + if (collectionData.status >= 300 && collectionData.status < 500) { + throw Error(); + } + // 2. Now add all tabs const res = await fetch( `${api}/${collectionData.data._id}/timelines/create-multiple`, @@ -118,39 +125,65 @@ const saveAlltabs = async () => { body: JSON.stringify(structuredTimelines), } ); - console.log(res); + const data = await res.json(); + if (data.status >= 300 && data.status < 500) { + throw Error(); + } + await chrome.storage.local.set({ "tab-session": tabSessionNum }); - createNotification( - `Added all tabs to ${collectionData.data.title}`, - "See in the Linkcollect extension" - ); } catch (error) { - createNotification(`Unable to add!`, "May be try again later!!"); + var hasError = true; } - chrome.tabs.query({ active: true, currentWindow: true },(tabs)=>{ - const activeTab = tabs[0]; - console.log(activeTab); - chrome.tabs.sendMessage(activeTab.id, { - message: "ALL_TABS_SAVED", - }); - }) + sendMessage( + hasError || false, + !hasError ? "All tabs saved" : "Unable to save" + ); }; -const createNotification = (title, message) => { - chrome.notifications.create({ - title: title, - message: message, - iconUrl: "./logo.png", - type: "basic", +const sendMessage = (hasError = false, userMessage) => { + console.log("Hello"); + chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { + const activeTab = tabs[0]; + chrome.tabs.sendMessage( + activeTab.id, + { + message: "ALL_TABS_SAVED", + hasError: hasError, + userMessage: userMessage, + }, + (response) => { + if (!chrome.runtime.lastError) { + // if you have any response + console.log(response); + } else { + // if your document doesn’t have any response, it’s fine but you should actually handle + // it and we are doing this by carefully examining chrome.runtime.lastError + console.log(response); + } + } + ); }); }; -const structureTimeline = (tab) => { +const structureTimeline =(tab) =>{ const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); - return { - link: tab.url, - title: tab.title, - favicon: tab.favIconUrl, - time, - }; + return { + + link: tab.url, + title: tab.title, + favicon: tab.favIconUrl, + time, + }; +} + +const filteredTimeline = (tab) => { + + if ( + /^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/g.test( + tab.url + ) + ) + return { + tab, + }; }; diff --git a/src/contenScript/approve.png b/src/contenScript/approve.png new file mode 100644 index 0000000000000000000000000000000000000000..9f608d480280cff5846c9d91789a254d23d7f87a GIT binary patch literal 803 zcmV+;1Kj+HP)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPuh*JS{kTV|%JjGOyqyo$vV;Fo?fIG0MAf^J&71$(@2bj~c ztCP<1$JyuXjBj+ZPCxBx^ZvA8{n;14_}svR{z3!v0>*m3- z$?5jq8MA2zldiKAfs!xXhnJNg@ta8l4GpB(C^{LYj64M7v9{f(`{K#L+&F?xfurP8eY6Cz9%OV?0KmLUy7dlJ zwD@FlAqzY&KxCeJkEo!TzymU^Z2)RA{z5!xxz|YNi{nXDKwg~OoO^f0gG*UK0(US8 zQKAuWuMOCNwsk-st&?9rA%~>B?&Ce!(li^BPJQa%Tc_6p(3ID({WW_en;nDqf(m!5 z19UHM>B>dJ8fTeLsKVS=6 zJWp;fhyH&=v~6T)>c$`BKEh~j5;-$r2sQ#FyTUPsv$1PNv~m)6C^ZC&pelge6|W2m z@v-ATqiWLU28E!?fCZz1NHY!6ld2jd&2$F3e!mTXptkRtBiVTK-FnA#7!FznaT~Vq zK*rm>mV_E>xQ4Dj@+nvbstQoi^b10+eIxh>eZMc#v6M|AsOla#RaQ&2piz?4rB;{^ z`7*gFYT8~2+7(r;09epLTQRM6saoQW$b3-~Fy2&BSJ}(AzmH9pB{MH_9kl1fdZQsJ zsvak02eA}zdUI9)7^W`7`I5tdi{ - console.log("Running content script",request) - if(request.message === "LOGIN_SUCCESS"){ - token=localStorage.getItem("token") - if(token){ - chrome.storage.local.set({"token":token}); +const imageUrl = chrome.runtime.getURL("approve.png"); +const failedUrl = chrome.runtime.getURL("failed.png"); + +const ContentScript = () => { + const toastWrapper = { + padding: "4px 12px", + display: "flex", + width: "225px", + color: "#6166F1", + justifyContent: "center", + gap: "24px", + alignItems: "center", + fontSize: "16px", + fontFamily: "'Lexend'", + borderRadius: "20px", + boxShadow: "0px 2px 13px 0px rgba(43,30,43,1)", + position: "fixed", + zIndex: "999999999", + backgroundColor: "#ffff", + top: "10px", + left: "14px", + fontWeight: "500", + transform: "translateX(-390px)", + transition: "all 0.3s ease-in", + }; + const imageSizer = { + width: "20px", + height: "20px", + }; + + const failWrapper = { + padding: "4px 12px", + display: "flex", + // width: "225px", + color: "#6166F1", + justifyContent: "center", + gap: "24px", + alignItems: "center", + fontSize: "16px", + fontColor:"red", + fontFamily: "'Lexend'", + borderRadius: "20px", + boxShadow: "0px 2px 13px 0px rgba(43,30,43,1)", + position: "fixed", + zIndex: "9999999999", + backgroundColor: "#ffff", + top: "10px", + left: "14px", + fontWeight: "500", + transform: "translateX(-390px)", + transition: "all 0.3s ease-in", + }; + return ( + <> +
    + +

    Unable to Saved

    +
    +
    + +

    All Tabs Saved

    +
    + + ); +}; + +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + console.log("Running content script", request); + console.log( + sender.tab + ? "from a content script:" + sender.tab.url + : "from the extension" + ); + if (request.message === "LOGIN_SUCCESS") { + token = localStorage.getItem("token"); + if (token) { + chrome.storage.local.set({ token: token }); } } - console.log(request); - if(request.message === "ALL_TABS_SAVED"){ - console.log("Worked") + console.log("Alert"); + if (request.message === "ALL_TABS_SAVED") { + console.log("Worked"); + showToast(request.hasError,request.userMessage); } -}) +}); + +const hostFile = document.createElement("div"); +hostFile.id = "linkcollect-extenstion-content"; +hostFile.style.color = "red"; +document.body.appendChild(hostFile); + +//Using Shadow root +const host = document.getElementById("linkcollect-extenstion-content"); +const root = host.attachShadow({ mode: "open" }); +const div = document.createElement("div"); +div.id = "toast-id"; +root.appendChild(div); +const toastRoot = createRoot(div); +toastRoot.render(); +const showToast = (hasError=false,msg) => { + const toastId = document.querySelector("#linkcollect-extenstion-content"); + const shadowRoot = toastId.shadowRoot; + const getInnerRoot = shadowRoot.getElementById("toast-id"); + const idName = hasError ? "#toast-content-failure" : "#toast-content-success"; + console.log(idName) + const toastComponent = getInnerRoot.querySelector(idName); + toastComponent.querySelector('p').innerText=msg + toastComponent.style.transform = "translateX(0px)"; + setTimeout(() => { + toastComponent.style.transform = "translateX(-390px)"; + }, 2000); +}; +// display: flex; width: 225px; color: rgb(97, 102, 241); justify-content: center; gap: 24px; align-items: center; font-size: 16px; font-family: Lexend; border-radius: 20px; box-shadow: rgb(43, 30, 43) 0px 2px 13px 0px; position: fixed; z-index: 999999999; background-color: rgb(255, 255, 255); top: 10px; left: 14px; font-weight: 500; diff --git a/src/contenScript/failed.png b/src/contenScript/failed.png new file mode 100644 index 0000000000000000000000000000000000000000..1060a5f05341c62c8cc97fcb55da7f052ce99cc4 GIT binary patch literal 15326 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 Date: Fri, 21 Apr 2023 19:59:24 +0530 Subject: [PATCH 102/112] Link saved --- src/background/background.js | 77 +++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 14 deletions(-) diff --git a/src/background/background.js b/src/background/background.js index 625331e..d73ecca 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -23,6 +23,13 @@ chrome.runtime.onInstalled.addListener(async () => { title: "Save to Linkcollect", contexts: ["page"], }); + + chrome.contextMenus.create({ + id: "save-link-to-recent", + title: "Save Link To Recent Collection", + contexts: ["link"], + }); + chrome.contextMenus.create({ title: "Save All tabs", parentId: "linkcollect-12", @@ -40,7 +47,7 @@ chrome.runtime.onInstalled.addListener(async () => { // Context menu click listeners chrome.contextMenus.onClicked.addListener(async (item, tab) => { - await acionDistaptcher(item.menuItemId); + await acionDistaptcher(item); }); // Commands listeners @@ -49,7 +56,8 @@ chrome.commands.onCommand.addListener(async (command) => { }); // API Action creator based on event -const acionDistaptcher = async (name) => { +const acionDistaptcher = async (item) => { + let name = item.menuItemId; switch (name) { case "save-current-tab": await saveCurrentTab(); @@ -57,6 +65,9 @@ const acionDistaptcher = async (name) => { case "save-all-tabs": await saveAlltabs(); break; + case "save-link-to-recent": + await saveLinkToRecent(item); + break; } }; @@ -91,7 +102,9 @@ const saveAlltabs = async () => { const token = await chrome.storage.local.get(["token"]); const tabs = await chrome.tabs.query({}); const currentTabSession = await chrome.storage.local.get(["tab-session"]); - const structuredTimelines = tabs.filter(filteredTimeline).map(structureTimeline); + const structuredTimelines = tabs + .filter(filteredTimeline) + .map(structureTimeline); console.log(structuredTimelines); try { //1. Need to create new collection @@ -140,6 +153,32 @@ const saveAlltabs = async () => { ); }; +// Save link +const saveLinkToRecent = async (item) => { + const collection = await chrome.storage.local.get(["collection"]); + const token = await chrome.storage.local.get(["token"]); + const structuredTimeLine = await getWebsiteData(item.linkUrl); + try { + const res = await fetch(`${api}/${collection.collection.id}/timelines`, { + method: "POST", + headers: { + "Content-type": "application/json", + Authorization: `Bearer ${token.token}`, // notice the Bearer before your token + }, + body: JSON.stringify(structuredTimeLine), + }); + const data = await res.json(); + if (data.status >= 300 && data.status < 500) { + throw Error(); + } + } catch (error) { + console.log(error); + var hasError = true; + } + sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); +}; + +// Message Creatort to show the toast message in the browser const sendMessage = (hasError = false, userMessage) => { console.log("Hello"); chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { @@ -165,19 +204,18 @@ const sendMessage = (hasError = false, userMessage) => { }); }; -const structureTimeline =(tab) =>{ +// Utilty funtions +const structureTimeline = (tab) => { const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); - return { - - link: tab.url, - title: tab.title, - favicon: tab.favIconUrl, - time, - }; -} + return { + link: tab.url, + title: tab.title, + favicon: tab.favIconUrl, + time, + }; +}; -const filteredTimeline = (tab) => { - +const filteredTimeline = (tab) => { if ( /^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/g.test( tab.url @@ -187,3 +225,14 @@ const filteredTimeline = (tab) => { tab, }; }; + +const getWebsiteData = async (url) => { + const time = new Date("14 Jun 2017 00:00:00 PDT").toUTCString(); + const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); + return { + link: url, + title: "link from " + tabs[0].title, + favicon: tabs[0].favIconUrl, + time, + }; +}; From 4dd8224a2eae86cab91a44776c62b11e2b11c75b Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 20:19:37 +0530 Subject: [PATCH 103/112] Open links in new tab created --- src/Screens/Bookmarks.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 9752237..17404bd 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -105,9 +105,11 @@ const Bookmarks = () => { // opening all tabs at one go const openAllLinks = ()=> { - for(var i=0;itl.link); + console.log(linksToOpen) + chrome.windows.create({url: linksToOpen}, function(window) { + console.log(window) + }); } const backScreenHandler = (e) => { From 28537901771b7af585db04e9fe6645e93e5beb47 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 21:25:34 +0530 Subject: [PATCH 104/112] toast for chrome extension --- public/manifest.json | 7 ++++- .../CollectiionItem/CollectionItem.js | 7 +---- src/Components/Loader/Loader.js | 2 +- src/Screens/Home.js | 4 ++- src/background/background.js | 10 +++++++ src/contenScript/contentScript.js | 3 ++ src/popup.jsx | 2 +- src/utils/chromeAPI.js | 28 ++++++++++++++++++- webpack.prod.js | 2 +- 9 files changed, 53 insertions(+), 12 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index 7ce0470..68b36be 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -11,6 +11,8 @@ "notifications" ], "host_permissions": [ + "http://*/*", + "https://*/*", "" ], "background": { @@ -36,9 +38,10 @@ "content_scripts": [ { "matches": [ + "http://*/*", + "https://*/*", "" ], - "css":["contentScript.css"], "js": ["contentScript.js"] } ], @@ -46,6 +49,8 @@ { "resources": ["assets/bookmark.png","approve.png","failed.png"], "matches": [ + "http://*/*", + "https://*/*", "" ] } diff --git a/src/Components/CollectiionItem/CollectionItem.js b/src/Components/CollectiionItem/CollectionItem.js index f80e413..b99e962 100644 --- a/src/Components/CollectiionItem/CollectionItem.js +++ b/src/Components/CollectiionItem/CollectionItem.js @@ -22,7 +22,6 @@ const CollectionItem = ({ const [copyText,setCopyText] = useState("Copy Link"); const [isAdding,setIsAdding] = useState(false); const copyImageRef = useRef(); - const bookMarkImage = useRef(); const auth = useSelector(state=>state.auth); const onCopy = () => { setCopyText("Copied") @@ -40,10 +39,6 @@ const CollectionItem = ({ setIsAdding(true); await addHandler(collectionId); setIsAdding(false); - if(bookmark) bookmark.current.src=approveWhite; - setTimeout(()=>{ - bookmark.current.src=AddIcon - },2500) } @@ -84,7 +79,7 @@ const CollectionItem = ({ onClick={addBookMarkHandler} > - {!isAdding ? : } + {!isAdding ? : }
    diff --git a/src/Components/Loader/Loader.js b/src/Components/Loader/Loader.js index ead39f0..3c91abd 100644 --- a/src/Components/Loader/Loader.js +++ b/src/Components/Loader/Loader.js @@ -7,7 +7,7 @@ const Loader = ({text}) => { - {text} + {text}
    ); }; diff --git a/src/Screens/Home.js b/src/Screens/Home.js index baf4a53..1d9be1e 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -8,7 +8,7 @@ import { getAllCollectionsWithoutTimelines } from "../api/collectionService"; import NoResult from "../Components/NoResult/NoResult"; import Loader from "../Components/Loader/Loader"; import PageLoader from "../Components/Loader/PageLoader"; -import { getCurrentTab, upadteLatestCollection } from "../utils/chromeAPI"; +import { getCurrentTab, sendMessage, upadteLatestCollection } from "../utils/chromeAPI"; import { createTimeline } from "../api/timelineService"; import { sortByLatestUpdated } from "../utils/utilty"; @@ -68,8 +68,10 @@ const Home = () => { await upadteLatestCollection(updatedCollections[collectionIndex]._id,updatedCollections[collectionIndex].title) } catch (error) { // Need to provide a error message + var hasError=true console.log(error); } + sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); } const onSearchHandler = (e) =>{ diff --git a/src/background/background.js b/src/background/background.js index 4daeffb..3efa1eb 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -11,6 +11,16 @@ chrome.tabs.onUpdated.addListener((tabId, _, tab) => { console.log("Hello"); chrome.tabs.sendMessage(tabId, { message: "LOGIN_SUCCESS", + }, + (response) => { + if (!chrome.runtime.lastError) { + // if you have any response + console.log(response); + } else { + // if your document doesn’t have any response, it’s fine but you should actually handle + // it and we are doing this by carefully examining chrome.runtime.lastError + console.log(response); + } }); } }); diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 3021c95..2697053 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -78,12 +78,15 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { token = localStorage.getItem("token"); if (token) { chrome.storage.local.set({ token: token }); + sendResponse({resMsg:"Done!"}) } + return; } console.log("Alert"); if (request.message === "ALL_TABS_SAVED") { console.log("Worked"); showToast(request.hasError,request.userMessage); + sendResponse({resMsg:"Done!"}) } }); diff --git a/src/popup.jsx b/src/popup.jsx index e527ff8..5f8f7f8 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -23,7 +23,7 @@ const Popup = () => { const authState = useSelector((state) => state.auth); useEffect(() => { chrome.storage.local.get(["token"], async (res) => { - + console.log(res.token); if (res.token) { dispatch(authStart()); const response = jwt_decode(res.token); diff --git a/src/utils/chromeAPI.js b/src/utils/chromeAPI.js index 3989118..1f37b81 100644 --- a/src/utils/chromeAPI.js +++ b/src/utils/chromeAPI.js @@ -8,4 +8,30 @@ export const getLocalData = async (key1,...rest) =>{ } export const upadteLatestCollection =async (id,collectionName) =>{ await chrome.storage.local.set({collection:{id:id,collectionName:collectionName}}) -} \ No newline at end of file +} + +export const sendMessage = (hasError = false, userMessage) => { + console.log("Hello"); + chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { + console.log(tabs) + const activeTab = tabs[0]; + chrome.tabs.sendMessage( + activeTab.id, + { + message: "ALL_TABS_SAVED", + hasError: hasError, + userMessage: userMessage, + }, + (response) => { + if (!chrome.runtime.lastError) { + // if you have any response + console.log(response); + } else { + // if your document doesn’t have any response, it’s fine but you should actually handle + // it and we are doing this by carefully examining chrome.runtime.lastError + console.log(response); + } + } + ); + }); + }; \ No newline at end of file diff --git a/webpack.prod.js b/webpack.prod.js index 7d13f7a..877c8f5 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -1,5 +1,5 @@ const {merge} = require("webpack-merge"); -const config = require(".webpack.config.js"); +const config = require("./webpack.config.js"); module.exports = merge(config,{ mode: "production", From c58a082f6143db59cbe1027d63c33da9a13f1764 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 23:16:52 +0530 Subject: [PATCH 105/112] styling fix --- src/background/background.js | 2 +- src/contenScript/contentScript.js | 34 +++++++++++++++++++------------ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/background/background.js b/src/background/background.js index 3efa1eb..89ba9e2 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -67,7 +67,7 @@ chrome.commands.onCommand.addListener(async (command) => { // API Action creator based on event const acionDistaptcher = async (item) => { - let name = item.menuItemId; + let name = item.menuItemId || item; switch (name) { case "save-current-tab": await saveCurrentTab(); diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 2697053..94dfe53 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -6,15 +6,13 @@ const failedUrl = chrome.runtime.getURL("failed.png"); const ContentScript = () => { const toastWrapper = { - padding: "4px 12px", + padding: "1px 16px", display: "flex", - width: "225px", color: "#6166F1", justifyContent: "center", - gap: "24px", + gap: "11px", alignItems: "center", - fontSize: "16px", - fontFamily: "'Lexend'", + fontSize: "20px", borderRadius: "20px", boxShadow: "0px 2px 13px 0px rgba(43,30,43,1)", position: "fixed", @@ -27,21 +25,19 @@ const ContentScript = () => { transition: "all 0.3s ease-in", }; const imageSizer = { - width: "20px", - height: "20px", + width: "28px", + height: "28px", }; const failWrapper = { - padding: "4px 12px", + padding: "1px 16px", display: "flex", - // width: "225px", color: "#6166F1", justifyContent: "center", - gap: "24px", + gap: "11px", alignItems: "center", - fontSize: "16px", + fontSize: "21px", fontColor:"red", - fontFamily: "'Lexend'", borderRadius: "20px", boxShadow: "0px 2px 13px 0px rgba(43,30,43,1)", position: "fixed", @@ -75,9 +71,11 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { : "from the extension" ); if (request.message === "LOGIN_SUCCESS") { - token = localStorage.getItem("token"); + const token = localStorage.token; + if (token) { chrome.storage.local.set({ token: token }); + console.log(token); sendResponse({resMsg:"Done!"}) } return; @@ -98,6 +96,16 @@ document.body.appendChild(hostFile); //Using Shadow root const host = document.getElementById("linkcollect-extenstion-content"); const root = host.attachShadow({ mode: "open" }); + +const style = document.createElement('style'); +style.innerText=` + @import url('https://fonts.googleapis.com/css2?family=Lexend:wght@300;400;500;600;700&display=swap') + div{ + font-family: 'Lexend', sans-serif; + } + ` +root.appendChild(style) + const div = document.createElement("div"); div.id = "toast-id"; root.appendChild(div); From 735e32b8cc3cff1e7973addfac3aa8b325681ae6 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 23:26:38 +0530 Subject: [PATCH 106/112] Toast height fixed --- src/contenScript/contentScript.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 94dfe53..2ada26c 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -8,6 +8,7 @@ const ContentScript = () => { const toastWrapper = { padding: "1px 16px", display: "flex", + height: "47px", color: "#6166F1", justifyContent: "center", gap: "11px", @@ -21,7 +22,7 @@ const ContentScript = () => { top: "10px", left: "14px", fontWeight: "500", - transform: "translateX(-390px)", + transform: "translateX(0px)", transition: "all 0.3s ease-in", }; const imageSizer = { @@ -32,6 +33,7 @@ const ContentScript = () => { const failWrapper = { padding: "1px 16px", display: "flex", + height: "47px", color: "#6166F1", justifyContent: "center", gap: "11px", @@ -46,7 +48,7 @@ const ContentScript = () => { top: "10px", left: "14px", fontWeight: "500", - transform: "translateX(-390px)", + transform: "translateX(0px)", transition: "all 0.3s ease-in", }; return ( From deb0eb6c5c59cecc9fb33a7d566f98f02dcaa4f6 Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Fri, 21 Apr 2023 23:28:31 +0530 Subject: [PATCH 107/112] position fix --- src/contenScript/contentScript.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 2ada26c..5af93bd 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -22,7 +22,7 @@ const ContentScript = () => { top: "10px", left: "14px", fontWeight: "500", - transform: "translateX(0px)", + transform: "translateX(-390px)", transition: "all 0.3s ease-in", }; const imageSizer = { @@ -48,7 +48,7 @@ const ContentScript = () => { top: "10px", left: "14px", fontWeight: "500", - transform: "translateX(0px)", + transform: "translateX(-390px)", transition: "all 0.3s ease-in", }; return ( From 245a6045398fdf17f4ceca6d2693f2847439c20d Mon Sep 17 00:00:00 2001 From: subhradwi01 Date: Sat, 22 Apr 2023 02:23:44 +0530 Subject: [PATCH 108/112] Prod update --- public/manifest.json | 15 +++++------ src/Screens/Bookmarks.js | 15 ++++++----- src/Screens/EditCollection.js | 2 +- src/Screens/Home.js | 4 +-- src/Screens/NewCollection.js | 1 - src/Screens/Splash.js | 4 +-- src/api/apiConfig.json | 2 +- src/api/authService.js | 44 ------------------------------- src/background/background.js | 39 +++++++++++---------------- src/contenScript/contentScript.js | 12 +-------- src/popup.jsx | 1 - src/utils/chromeAPI.js | 2 -- 12 files changed, 35 insertions(+), 106 deletions(-) delete mode 100644 src/api/authService.js diff --git a/public/manifest.json b/public/manifest.json index 68b36be..7144c2f 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,14 +1,13 @@ { "name": "LinkCollect", - "version": "0.1.0", - "description": "More than A Bookmark", + "version": "1.0.0", + "description": "linkcollect is the simplest way to save & share web links from anywhere to anyone", "permissions": [ "storage", "tabs", "scripting", "activeTab", - "contextMenus", - "notifications" + "contextMenus" ], "host_permissions": [ "http://*/*", @@ -21,11 +20,11 @@ "commands": { "save-current-tab": { "suggested_key": "Alt+C", - "description": "Inject a script on the page" + "description": "Inject a save recent collection " }, "save-all-tabs": { "suggested_key": "Alt+A", - "description": "Inject a script on the page" + "description": "Inject a save all tabs script" } }, "icons": { @@ -39,7 +38,7 @@ { "matches": [ "http://*/*", - "https://*/*", + "https://*/*", "" ], "js": ["contentScript.js"] @@ -50,7 +49,7 @@ "resources": ["assets/bookmark.png","approve.png","failed.png"], "matches": [ "http://*/*", - "https://*/*", + "https://*/*", "" ] } diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 17404bd..5dc9e45 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -57,7 +57,7 @@ const Bookmarks = () => { ); setCollection(tempCollection); } catch (error) { - console.log(error); + // console.log(error); } }; @@ -77,8 +77,13 @@ const Bookmarks = () => { setCollection(tempCollection); } catch (error) { // Need to provide a error message - console.log(error); + // console.log(error); + var hasError=true; } + sendMessage( + hasError || false, + !hasError ? "Link Saved" : "Unable To Save" + ); setIsAdding(false); }; @@ -98,7 +103,6 @@ const Bookmarks = () => { setIsLoading(false) navigation("/collection") }catch(error){ - console.log(error) setIsLoading(false); } } @@ -106,10 +110,7 @@ const Bookmarks = () => { // opening all tabs at one go const openAllLinks = ()=> { var linksToOpen = collection.timelines.map(tl=>tl.link); - console.log(linksToOpen) - chrome.windows.create({url: linksToOpen}, function(window) { - console.log(window) - }); + chrome.windows.create({url: linksToOpen}, function(window) {}); } const backScreenHandler = (e) => { diff --git a/src/Screens/EditCollection.js b/src/Screens/EditCollection.js index b06a1a7..bc8ffae 100644 --- a/src/Screens/EditCollection.js +++ b/src/Screens/EditCollection.js @@ -41,7 +41,7 @@ const EditCollection = () => { const {collectionData} = await updateCollection(collectionId,form); navigate(-1) }catch(error){ - console.log(error); + } setLoading(false); } diff --git a/src/Screens/Home.js b/src/Screens/Home.js index 1d9be1e..4eebaf2 100644 --- a/src/Screens/Home.js +++ b/src/Screens/Home.js @@ -34,7 +34,6 @@ const Home = () => { try { const res = await getAllCollectionsWithoutTimelines(); const sorteData = sortByLatestUpdated(res.data.data); - console.log(sorteData) SetCollections(sorteData); setFiltererdCollection(sorteData); setLoadeing(false) @@ -69,9 +68,8 @@ const Home = () => { } catch (error) { // Need to provide a error message var hasError=true - console.log(error); } - sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); + sendMessage(hasError || false, !hasError ? "Link Saved" : "Unable to Save"); } const onSearchHandler = (e) =>{ diff --git a/src/Screens/NewCollection.js b/src/Screens/NewCollection.js index e628f82..b42835d 100644 --- a/src/Screens/NewCollection.js +++ b/src/Screens/NewCollection.js @@ -45,7 +45,6 @@ const NewCollection = () => { const {collectionData} = await createCollection(form); navigate(-1) }catch(error){ - console.log(error); } setLoading(false); } diff --git a/src/Screens/Splash.js b/src/Screens/Splash.js index 698eb4b..9ed151a 100644 --- a/src/Screens/Splash.js +++ b/src/Screens/Splash.js @@ -8,12 +8,10 @@ const Splash = () => { const startLoginHanlder = () =>{ chrome.storage.local.get(["token"],(result)=>{ if(result.token!=undefined){ - //update the state and redirect to the home }else{ - // PROD CHANGE : url : https://linkcollect.io/login chrome.tabs.create({ - url:"http://localhost:3000/" + url:"https://linkcollect.io/" }) } }); diff --git a/src/api/apiConfig.json b/src/api/apiConfig.json index a5b3d45..8d2589a 100644 --- a/src/api/apiConfig.json +++ b/src/api/apiConfig.json @@ -1,3 +1,3 @@ { - "baseUrl": "http://localhost:7000/api/v1" + "baseUrl": "https://api.linkcollect.io/api/v1" } diff --git a/src/api/authService.js b/src/api/authService.js deleted file mode 100644 index dc687f0..0000000 --- a/src/api/authService.js +++ /dev/null @@ -1,44 +0,0 @@ -import http from "./httpService"; -import queryString from "query-string"; -import api from "./apiConfig.json"; - -const apiEndpoint = api.baseUrl + "/user"; - -export function register(name, email, password) { - return http.post(`${apiEndpoint}/signup`, { - name, - email, - password, - }); -} - -export function login(email, password) { - return http.post(`${apiEndpoint}/signin`, { - email, - password, - }); -} - -export function getUserById(userId) { - return http.get(`${apiEndpoint}/get-user/${userId}`); -} - -// For logout just nullify token in loaclstorage (token=null) - -// Common for Google sign in and Sign up and this generates a link -export function googleAuth() { - const query = queryString.stringify({ - client_id: - "842762588000-kh4ksf014o6upmdklc1tukus5d4gi5ch.apps.googleusercontent.com", - redirect_uri: "http://localhost:7000/api/v1/user/google-auth", // Changes on production - scope: [ - "https://www.googleapis.com/auth/userinfo.email", - "https://www.googleapis.com/auth/userinfo.profile", - ].join(" "), // space seperated string - response_type: "code", - access_type: "offline", - prompt: "consent", - }); - - return `https://accounts.google.com/o/oauth2/v2/auth?${query}`; -} diff --git a/src/background/background.js b/src/background/background.js index 89ba9e2..f778dc0 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -1,25 +1,21 @@ // PROD: API URL CHANGE -const api = "http://localhost:7000/api/v1/collections"; +const api = "https://api.linkcollect.io/api/v1/collections"; chrome.tabs.onUpdated.addListener((tabId, _, tab) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const activeTab = tabs[0]; - console.log(activeTab); // Change : Need to change the click while uploading - // PROD Change : url https://linkcollect.io/ ==> now, when other pages upadte other url https://linkcollect.io/username - if (activeTab?.url === "http://localhost:3000/") { - console.log("Hello"); + // PROD Change : url https://linkcollect.io/ ==> now, when other pages upadte other url https://linkcollect.io/usernamer + const url = new URL(activeTab?.url); + if (url.hostname === "linkcollect.io") { chrome.tabs.sendMessage(tabId, { message: "LOGIN_SUCCESS", }, (response) => { if (!chrome.runtime.lastError) { - // if you have any response - console.log(response); + // console.log(response); } else { - // if your document doesn’t have any response, it’s fine but you should actually handle - // it and we are doing this by carefully examining chrome.runtime.lastError - console.log(response); + // console.log(response); } }); } @@ -30,7 +26,7 @@ chrome.runtime.onInstalled.addListener(async () => { await chrome.storage.local.set({ "tab-session": 0 }); chrome.contextMenus.create({ id: "linkcollect-12", - title: "Save to Linkcollect", + title: "Save to LinkCollect", contexts: ["page"], }); @@ -41,14 +37,14 @@ chrome.runtime.onInstalled.addListener(async () => { }); chrome.contextMenus.create({ - title: "Save All tabs", + title: "Save All Tabs (of this window)", parentId: "linkcollect-12", id: "save-all-tabs", contexts: ["page"], }); chrome.contextMenus.create({ - title: "Save this tab to recent collection", + title: "Save This Tab To Recent Collection", parentId: "linkcollect-12", id: "save-current-tab", contexts: ["page"], @@ -101,10 +97,9 @@ const saveCurrentTab = async () => { throw Error(); } } catch (error) { - console.log(error); var hasError = true; } - sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); + sendMessage(hasError || false, !hasError ? "Link Saved" : "Unable To Save"); }; //Save all tabs @@ -115,12 +110,10 @@ const saveAlltabs = async () => { const structuredTimelines = tabs .filter(filteredTimeline) .map(structureTimeline); - console.log(structuredTimelines); try { //1. Need to create new collection let tabSessionNum = currentTabSession["tab-session"] + 1; const form = new FormData(); - console.log(tabSessionNum); form.append("title", `tabs session ${tabSessionNum}`); const collection = await fetch(`${api}`, { method: "POST", @@ -159,7 +152,7 @@ const saveAlltabs = async () => { } sendMessage( hasError || false, - !hasError ? "All tabs saved" : "Unable to save" + !hasError ? "All Tabs Saved" : "Unable To Save" ); }; @@ -182,15 +175,13 @@ const saveLinkToRecent = async (item) => { throw Error(); } } catch (error) { - console.log(error); var hasError = true; } - sendMessage(hasError || false, !hasError ? "Link saved" : "Unable to save"); + sendMessage(hasError || false, !hasError ? "Link Saved" : "Unable To Save"); }; // Message Creatort to show the toast message in the browser const sendMessage = (hasError = false, userMessage) => { - console.log("Hello"); chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const activeTab = tabs[0]; chrome.tabs.sendMessage( @@ -203,11 +194,11 @@ const sendMessage = (hasError = false, userMessage) => { (response) => { if (!chrome.runtime.lastError) { // if you have any response - console.log(response); + // console.log(response); } else { // if your document doesn’t have any response, it’s fine but you should actually handle - // it and we are doing this by carefully examining chrome.runtime.lastError - console.log(response); + // // it and we are doing this by carefully examining chrome.runtime.lastError + // console.log(response); } } ); diff --git a/src/contenScript/contentScript.js b/src/contenScript/contentScript.js index 5af93bd..1bd2213 100644 --- a/src/contenScript/contentScript.js +++ b/src/contenScript/contentScript.js @@ -59,32 +59,23 @@ const ContentScript = () => {
    -

    All Tabs Saved

    +

    Saved To linkCollect

    ); }; chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - console.log("Running content script", request); - console.log( - sender.tab - ? "from a content script:" + sender.tab.url - : "from the extension" - ); if (request.message === "LOGIN_SUCCESS") { const token = localStorage.token; if (token) { chrome.storage.local.set({ token: token }); - console.log(token); sendResponse({resMsg:"Done!"}) } return; } - console.log("Alert"); if (request.message === "ALL_TABS_SAVED") { - console.log("Worked"); showToast(request.hasError,request.userMessage); sendResponse({resMsg:"Done!"}) } @@ -119,7 +110,6 @@ const showToast = (hasError=false,msg) => { const shadowRoot = toastId.shadowRoot; const getInnerRoot = shadowRoot.getElementById("toast-id"); const idName = hasError ? "#toast-content-failure" : "#toast-content-success"; - console.log(idName) const toastComponent = getInnerRoot.querySelector(idName); toastComponent.querySelector('p').innerText=msg toastComponent.style.transform = "translateX(0px)"; diff --git a/src/popup.jsx b/src/popup.jsx index 5f8f7f8..3f71dc6 100644 --- a/src/popup.jsx +++ b/src/popup.jsx @@ -23,7 +23,6 @@ const Popup = () => { const authState = useSelector((state) => state.auth); useEffect(() => { chrome.storage.local.get(["token"], async (res) => { - console.log(res.token); if (res.token) { dispatch(authStart()); const response = jwt_decode(res.token); diff --git a/src/utils/chromeAPI.js b/src/utils/chromeAPI.js index 1f37b81..e317f59 100644 --- a/src/utils/chromeAPI.js +++ b/src/utils/chromeAPI.js @@ -11,9 +11,7 @@ export const upadteLatestCollection =async (id,collectionName) =>{ } export const sendMessage = (hasError = false, userMessage) => { - console.log("Hello"); chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { - console.log(tabs) const activeTab = tabs[0]; chrome.tabs.sendMessage( activeTab.id, From f8f50a0842a9db5bf747c98fe2bbd7d83013ac06 Mon Sep 17 00:00:00 2001 From: Brad Parbs Date: Sat, 22 Apr 2023 02:41:19 +0530 Subject: [PATCH 109/112] final v1 changes --- src/Screens/Bookmarks.js | 3 +++ src/Screens/EditCollection.js | 2 +- src/Screens/Splash.js | 2 +- src/background/background.js | 12 +++++++----- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Screens/Bookmarks.js b/src/Screens/Bookmarks.js index 5dc9e45..93dc6f3 100644 --- a/src/Screens/Bookmarks.js +++ b/src/Screens/Bookmarks.js @@ -75,10 +75,13 @@ const Bookmarks = () => { const tempCollection = collection; tempCollection.timelines.push(data.data); setCollection(tempCollection); + setIsAdding(false); + } catch (error) { // Need to provide a error message // console.log(error); var hasError=true; + setIsAdding(false); } sendMessage( hasError || false, diff --git a/src/Screens/EditCollection.js b/src/Screens/EditCollection.js index bc8ffae..dd7fb7e 100644 --- a/src/Screens/EditCollection.js +++ b/src/Screens/EditCollection.js @@ -71,7 +71,7 @@ const EditCollection = () => {

    9&3~hrp?@ctHFcso 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 J0+uKRfpuuHUrUl}c%%An{G42}kf!pSf>saEv1P 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