diff --git a/package-lock.json b/package-lock.json index 6d73af44de48..478824ac04cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,6 +90,7 @@ } }, "eslint-plugin": { + "name": "eslint-plugin-lexical", "version": "1.0.0", "dev": true, "peerDependencies": { @@ -1178,6 +1179,18 @@ "node": ">= 0.10.4" } }, + "node_modules/@eduardoac-skimlinks/webext-redux": { + "version": "3.0.1-release-candidate", + "resolved": "https://registry.npmjs.org/@eduardoac-skimlinks/webext-redux/-/webext-redux-3.0.1-release-candidate.tgz", + "integrity": "sha512-Gv7LOjiqye+umkR4v0FqcWo8goqP333Lr2kqtMIWJMs5S12T5b3G87PoxuVqZByJk2Ebc6mJ/v7f3HMVzgFT+w==", + "dependencies": { + "lodash.assignin": "^4.2.0", + "lodash.clonedeep": "^4.5.0" + }, + "peerDependencies": { + "redux": ">= 3 <= 4" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -13605,12 +13618,22 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -19267,6 +19290,14 @@ "requires-port": "^1.0.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", @@ -19691,6 +19722,17 @@ "node": ">=10.13.0" } }, + "node_modules/webext-zustand": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/webext-zustand/-/webext-zustand-0.2.0.tgz", + "integrity": "sha512-CpEyOdWA5hzwvMazbzJycSGk6GGx+VBSZmibyzzUNlGWdF/RvQZpYpFe/H3/Aw1m+hKrl8NOwTJdt5iwxF/+fg==", + "dependencies": { + "@eduardoac-skimlinks/webext-redux": "3.0.1-release-candidate" + }, + "peerDependencies": { + "zustand": "^4" + } + }, "node_modules/webextension-polyfill": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", @@ -20848,6 +20890,33 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zustand": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", + "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "packages/lexical": { "version": "0.14.2", "license": "MIT" @@ -20887,7 +20956,9 @@ "hasInstallScript": true, "dependencies": { "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "webext-zustand": "0.2.0", + "zustand": "^4.5.1" }, "devDependencies": { "@types/react": "^18.2.46", diff --git a/packages/lexical-devtools/entrypoints/background.ts b/packages/lexical-devtools/entrypoints/background.ts index aad8c5e4d526..54d518a7dcdc 100644 --- a/packages/lexical-devtools/entrypoints/background.ts +++ b/packages/lexical-devtools/entrypoints/background.ts @@ -5,9 +5,16 @@ * LICENSE file in the root directory of this source tree. * */ +import store from '../store'; + export default defineBackground(() => { // eslint-disable-next-line no-console console.log('Hello from Lexical DevTools extension content script.', { id: browser.runtime.id, }); + + // listen state changes + store.subscribe((state) => { + // console.log(state); + }); }); diff --git a/packages/lexical-devtools/entrypoints/devtools-panel/App.tsx b/packages/lexical-devtools/entrypoints/devtools-panel/App.tsx new file mode 100644 index 000000000000..2cd42c878b6d --- /dev/null +++ b/packages/lexical-devtools/entrypoints/devtools-panel/App.tsx @@ -0,0 +1,36 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import * as React from 'react'; + +import lexicalLogo from '/lexical.svg'; + +import useStore from '../../store'; + +function App() { + const counter = useStore((state) => state.counter); + const increase = useStore((state) => state.increase); + + return ( + <> +
+ Edit src/App.tsx
and save to test HMR
+
Edit src/App.tsx
and save to test HMR