├── .changeset ├── bright-sheep-joke.md └── config.json ├── .eslintignore ├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ ├── CI.yml │ └── release.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── LICENSE.md ├── README.md ├── docs ├── Integrations │ └── Remote.md └── Walkthrough.md ├── eslint.js.config.base.mjs ├── eslint.js.react.jest.config.base.mjs ├── eslint.ts.config.base.mjs ├── eslint.ts.jest.config.base.mjs ├── eslint.ts.react.config.base.mjs ├── eslint.ts.react.jest.config.base.mjs ├── extension ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── babel.config.json ├── build.mjs ├── chrome │ └── manifest.json ├── docs │ ├── API │ │ ├── Arguments.md │ │ ├── Methods.md │ │ └── README.md │ ├── Architecture.md │ ├── Articles.md │ ├── Credits.md │ ├── FAQ.md │ ├── Features │ │ └── Trace.md │ ├── Feedback.md │ ├── Integrations.md │ ├── README.md │ ├── Recipes.md │ ├── Troubleshooting.md │ └── Videos.md ├── edge │ └── manifest.json ├── eslint.config.mjs ├── examples │ ├── buildAll.js │ ├── counter │ │ ├── .babelrc │ │ ├── actions │ │ │ └── counter.js │ │ ├── components │ │ │ └── Counter.js │ │ ├── containers │ │ │ └── App.js │ │ ├── index.html │ │ ├── index.js │ │ ├── package.json │ │ ├── reducers │ │ │ ├── counter.js │ │ │ └── index.js │ │ ├── server.js │ │ ├── store │ │ │ └── configureStore.js │ │ ├── test │ │ │ ├── actions │ │ │ │ └── counter.spec.js │ │ │ ├── components │ │ │ │ └── Counter.spec.js │ │ │ ├── containers │ │ │ │ └── App.spec.js │ │ │ ├── reducers │ │ │ │ └── counter.spec.js │ │ │ └── setup.js │ │ └── webpack.config.js │ ├── react-counter-messaging │ │ ├── .babelrc │ │ ├── components │ │ │ └── Counter.js │ │ ├── index.html │ │ ├── index.js │ │ ├── package.json │ │ └── webpack.config.js │ ├── router │ │ ├── .babelrc │ │ ├── actions │ │ │ └── todos.js │ │ ├── components │ │ │ ├── Footer.js │ │ │ ├── Header.js │ │ │ ├── MainSection.js │ │ │ ├── TodoItem.js │ │ │ └── TodoTextInput.js │ │ ├── constants │ │ │ ├── ActionTypes.js │ │ │ └── TodoFilters.js │ │ ├── containers │ │ │ ├── App.js │ │ │ ├── Root.js │ │ │ └── Wrapper.js │ │ ├── index.html │ │ ├── index.js │ │ ├── package.json │ │ ├── reducers │ │ │ ├── index.js │ │ │ └── todos.js │ │ ├── server.js │ │ ├── store │ │ │ └── configureStore.js │ │ ├── test │ │ │ ├── actions │ │ │ │ └── todos.spec.js │ │ │ ├── components │ │ │ │ ├── Footer.spec.js │ │ │ │ ├── Header.spec.js │ │ │ │ ├── MainSection.spec.js │ │ │ │ ├── TodoItem.spec.js │ │ │ │ └── TodoTextInput.spec.js │ │ │ ├── reducers │ │ │ │ └── todos.spec.js │ │ │ └── setup.js │ │ └── webpack.config.js │ ├── saga-counter │ │ ├── .babelrc │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── components │ │ │ │ └── Counter.js │ │ │ ├── main.js │ │ │ ├── reducers │ │ │ │ └── index.js │ │ │ └── sagas │ │ │ │ └── index.js │ │ └── webpack.config.js │ └── todomvc │ │ ├── .babelrc │ │ ├── actions │ │ ├── index.js │ │ └── todos.js │ │ ├── components │ │ ├── Footer.js │ │ ├── Header.js │ │ ├── MainSection.js │ │ ├── TodoItem.js │ │ └── TodoTextInput.js │ │ ├── constants │ │ ├── ActionTypes.js │ │ └── TodoFilters.js │ │ ├── containers │ │ └── App.js │ │ ├── index.html │ │ ├── index.js │ │ ├── package.json │ │ ├── reducers │ │ ├── index.js │ │ └── todos.js │ │ ├── server.js │ │ ├── store │ │ └── configureStore.js │ │ ├── test │ │ ├── actions │ │ │ └── todos.spec.js │ │ ├── components │ │ │ ├── Footer.spec.js │ │ │ ├── Header.spec.js │ │ │ ├── MainSection.spec.js │ │ │ ├── TodoItem.spec.js │ │ │ └── TodoTextInput.spec.js │ │ ├── reducers │ │ │ └── todos.spec.js │ │ └── setup.js │ │ └── webpack.config.js ├── firefox │ └── manifest.json ├── jest.config.cjs ├── package.json ├── src │ ├── app │ │ ├── Actions.tsx │ │ └── App.tsx │ ├── assets │ │ └── img │ │ │ ├── loading.svg │ │ │ └── logo │ │ │ ├── 128x128.png │ │ │ ├── 16x16.png │ │ │ ├── 38x38.png │ │ │ ├── 48x48.png │ │ │ ├── error.png │ │ │ ├── gray.png │ │ │ └── scalable.png │ ├── background │ │ ├── contextMenus.ts │ │ ├── index.ts │ │ ├── logging.ts │ │ ├── openWindow.ts │ │ └── store │ │ │ ├── apiMiddleware.ts │ │ │ ├── backgroundReducer.ts │ │ │ └── backgroundStore.ts │ ├── chromeApiMock.ts │ ├── contentScript │ │ └── index.ts │ ├── devpanel │ │ ├── devpanel.pug │ │ ├── index.tsx │ │ └── store │ │ │ ├── panelReducer.ts │ │ │ ├── panelStore.ts │ │ │ └── panelSyncMiddleware.ts │ ├── devtools │ │ ├── devtools.pug │ │ └── index.ts │ ├── options │ │ ├── AllowToRunGroup.tsx │ │ ├── ContextMenuGroup.tsx │ │ ├── EditorGroup.tsx │ │ ├── FilterGroup.tsx │ │ ├── MiscellaneousGroup.tsx │ │ ├── Options.tsx │ │ ├── index.tsx │ │ ├── options.pug │ │ └── syncOptions.ts │ ├── pageScript │ │ ├── Monitor.ts │ │ ├── api │ │ │ ├── filters.ts │ │ │ ├── generateInstanceId.ts │ │ │ ├── importState.ts │ │ │ ├── index.ts │ │ │ ├── notifyErrors.ts │ │ │ └── openWindow.ts │ │ ├── enhancerStore.ts │ │ └── index.ts │ ├── remote │ │ ├── index.tsx │ │ └── remote.pug │ └── style.pug ├── test │ ├── .eslintrc │ ├── __mocks__ │ │ └── styleMock.js │ ├── app │ │ ├── containers │ │ │ └── App.spec.jsx │ │ └── inject │ │ │ ├── api.spec.js │ │ │ └── enhancer.spec.js │ ├── chrome │ │ └── extension.spec.js │ ├── electron │ │ ├── devpanel.spec.js │ │ └── fixture │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ └── renderer.js │ │ │ └── webpack.config.js │ ├── perf │ │ ├── data.js │ │ └── send.spec.js │ ├── setup.js │ └── utils │ │ ├── e2e.js │ │ └── inject.js └── tsconfig.json ├── jest.config.js ├── package.json ├── packages ├── d3-state-visualizer │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── eslint.config.js │ ├── examples │ │ └── tree │ │ │ ├── CHANGELOG.md │ │ │ ├── eslint.config.mjs │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ └── index.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.webpack.json │ │ │ └── webpack.config.ts │ ├── package.json │ ├── src │ │ ├── charts │ │ │ ├── index.ts │ │ │ └── tree │ │ │ │ ├── sortAndSerialize.ts │ │ │ │ ├── tree.ts │ │ │ │ └── utils.ts │ │ └── index.ts │ └── tsconfig.json ├── d3tooltip │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── eslint.config.js │ ├── package.json │ ├── src │ │ └── index.ts │ └── tsconfig.json ├── map2tree │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── eslint.config.js │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ └── index.ts │ ├── test │ │ └── map2tree.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── react-base16-styling │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── eslint.config.js │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── colorConverters.ts │ │ ├── index.ts │ │ ├── themes │ │ │ ├── apathy.ts │ │ │ ├── ashes.ts │ │ │ ├── atelier-dune.ts │ │ │ ├── atelier-forest.ts │ │ │ ├── atelier-heath.ts │ │ │ ├── atelier-lakeside.ts │ │ │ ├── atelier-seaside.ts │ │ │ ├── bespin.ts │ │ │ ├── brewer.ts │ │ │ ├── bright.ts │ │ │ ├── chalk.ts │ │ │ ├── codeschool.ts │ │ │ ├── colors.ts │ │ │ ├── default.ts │ │ │ ├── eighties.ts │ │ │ ├── embers.ts │ │ │ ├── flat.ts │ │ │ ├── google.ts │ │ │ ├── grayscale.ts │ │ │ ├── greenscreen.ts │ │ │ ├── harmonic.ts │ │ │ ├── hopscotch.ts │ │ │ ├── index.ts │ │ │ ├── isotope.ts │ │ │ ├── marrakesh.ts │ │ │ ├── mocha.ts │ │ │ ├── monokai.ts │ │ │ ├── nicinabox.ts │ │ │ ├── ocean.ts │ │ │ ├── paraiso.ts │ │ │ ├── pop.ts │ │ │ ├── railscasts.ts │ │ │ ├── shapeshifter.ts │ │ │ ├── solarized.ts │ │ │ ├── summerfruit.ts │ │ │ ├── threezerotwofour.ts │ │ │ ├── tomorrow.ts │ │ │ ├── tube.ts │ │ │ └── twilight.ts │ │ └── types.ts │ ├── test │ │ └── index.test.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── react-dock │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── demo │ │ ├── CHANGELOG.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── App.tsx │ │ │ └── index.tsx │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── eslint.config.js │ ├── package.json │ ├── src │ │ ├── Dock.tsx │ │ ├── autoprefix.ts │ │ └── index.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── react-json-tree │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── eslint.config.js │ ├── examples │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── App.tsx │ │ │ └── index.tsx │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── ItemRange.tsx │ │ ├── JSONArrayNode.tsx │ │ ├── JSONArrow.tsx │ │ ├── JSONIterableNode.tsx │ │ ├── JSONNestedNode.tsx │ │ ├── JSONNode.tsx │ │ ├── JSONObjectNode.tsx │ │ ├── JSONValueNode.tsx │ │ ├── createStylingFromTheme.ts │ │ ├── getCollectionEntries.ts │ │ ├── index.tsx │ │ ├── objType.ts │ │ ├── themes │ │ │ └── solarized.ts │ │ └── types.ts │ ├── test │ │ └── objType.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-app-core │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── actions │ │ │ └── index.ts │ │ ├── components │ │ │ ├── BottomButtons.tsx │ │ │ ├── Header.tsx │ │ │ ├── InstanceSelector.tsx │ │ │ ├── MonitorSelector.tsx │ │ │ ├── Settings │ │ │ │ ├── StateTree.tsx │ │ │ │ ├── Themes.tsx │ │ │ │ └── index.tsx │ │ │ ├── TopButtons.tsx │ │ │ └── buttons │ │ │ │ ├── DispatcherButton.tsx │ │ │ │ ├── ExportButton.tsx │ │ │ │ ├── ImportButton.tsx │ │ │ │ ├── LockButton.tsx │ │ │ │ ├── PersistButton.tsx │ │ │ │ ├── PrintButton.tsx │ │ │ │ ├── RecordButton.tsx │ │ │ │ ├── SliderButton.tsx │ │ │ │ └── SyncButton.tsx │ │ ├── constants │ │ │ ├── actionTypes.ts │ │ │ └── dataTypes.ts │ │ ├── containers │ │ │ ├── Actions.tsx │ │ │ ├── App.tsx │ │ │ ├── DevTools.tsx │ │ │ └── monitors │ │ │ │ ├── ChartMonitorWrapper.tsx │ │ │ │ ├── Dispatcher.tsx │ │ │ │ ├── InspectorWrapper │ │ │ │ ├── ChartTab.tsx │ │ │ │ ├── RawTab.tsx │ │ │ │ ├── SubTabs.tsx │ │ │ │ ├── VisualDiffTab.tsx │ │ │ │ └── index.tsx │ │ │ │ └── Slider.tsx │ │ ├── index.tsx │ │ ├── middlewares │ │ │ ├── exportState.ts │ │ │ └── index.ts │ │ ├── reducers │ │ │ ├── index.ts │ │ │ ├── instances.ts │ │ │ ├── monitor.ts │ │ │ ├── notification.ts │ │ │ ├── reports.ts │ │ │ ├── section.ts │ │ │ ├── stateTreeSettings.ts │ │ │ └── theme.ts │ │ └── utils │ │ │ ├── commitExcessActions.ts │ │ │ ├── getMonitor.tsx │ │ │ ├── parseJSON.ts │ │ │ ├── stringifyJSON.ts │ │ │ └── updateState.ts │ ├── test │ │ ├── __mocks__ │ │ │ └── styleMock.ts │ │ ├── app.spec.tsx │ │ └── setup.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-app │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── assets │ │ └── index.html │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── buildUmd.mjs │ ├── demo │ │ └── index.tsx │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── actions │ │ │ └── index.ts │ │ ├── components │ │ │ └── Settings │ │ │ │ └── Connection.tsx │ │ ├── constants │ │ │ └── socketActionTypes.ts │ │ ├── index.tsx │ │ ├── middlewares │ │ │ └── api.ts │ │ ├── reducers │ │ │ ├── connection.ts │ │ │ ├── index.ts │ │ │ └── socket.ts │ │ ├── store │ │ │ └── configureStore.ts │ │ └── utils │ │ │ └── monitorActions.ts │ ├── tsconfig.demo.json │ ├── tsconfig.json │ ├── tsconfig.webpack.json │ └── webpack.config.ts ├── redux-devtools-chart-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── Chart.tsx │ │ ├── ChartMonitor.tsx │ │ ├── actions.ts │ │ ├── index.ts │ │ └── reducers.ts │ └── tsconfig.json ├── redux-devtools-cli │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── app │ │ ├── electron.cjs │ │ ├── index.html │ │ └── package.json │ ├── bin │ │ └── redux-devtools.js │ ├── defaultDbOptions.json │ ├── eslint.config.mjs │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── api │ │ │ ├── schema.ts │ │ │ └── schema_def.graphql │ │ ├── bin │ │ │ ├── injectServer.ts │ │ │ ├── openApp.ts │ │ │ └── redux-devtools.ts │ │ ├── db │ │ │ ├── connector.ts │ │ │ ├── migrations │ │ │ │ └── index.ts │ │ │ └── seeds │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── options.ts │ │ ├── routes.ts │ │ └── store.ts │ ├── test │ │ └── integration.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-dock-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── DockMonitor.tsx │ │ ├── actions.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ └── reducers.ts │ └── tsconfig.json ├── redux-devtools-extension │ ├── CHANGELOG.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── developmentOnly.ts │ │ ├── index.ts │ │ ├── logOnly.ts │ │ └── logOnlyInProduction.ts │ └── tsconfig.json ├── redux-devtools-inspector-monitor-test-tab │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── demo │ │ ├── CHANGELOG.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── DemoApp.tsx │ │ │ ├── DevTools.tsx │ │ │ ├── getOptions.ts │ │ │ ├── index.tsx │ │ │ └── reducers.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── TestGenerator.tsx │ │ ├── index.tsx │ │ ├── redux │ │ │ ├── ava │ │ │ │ ├── index.ts │ │ │ │ └── template.ts │ │ │ ├── jest │ │ │ │ ├── index.ts │ │ │ │ └── template.ts │ │ │ ├── mocha │ │ │ │ ├── index.ts │ │ │ │ └── template.ts │ │ │ └── tape │ │ │ │ ├── index.ts │ │ │ │ └── template.ts │ │ ├── templateForm.ts │ │ ├── types.ts │ │ └── vanilla │ │ │ ├── ava │ │ │ ├── index.ts │ │ │ └── template.ts │ │ │ ├── jest │ │ │ ├── index.ts │ │ │ └── template.ts │ │ │ ├── mocha │ │ │ ├── index.ts │ │ │ └── template.ts │ │ │ └── tape │ │ │ ├── index.ts │ │ │ └── template.ts │ ├── test │ │ ├── TestGenerator.spec.tsx │ │ ├── __mocks__ │ │ │ └── styleMock.ts │ │ ├── __snapshots__ │ │ │ └── TestGenerator.spec.tsx.snap │ │ └── assertions.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-inspector-monitor-trace-tab │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── StackTraceTab.tsx │ │ ├── openFile.ts │ │ ├── presets.ts │ │ └── react-error-overlay │ │ │ ├── components │ │ │ ├── CodeBlock.tsx │ │ │ └── Collapsible.tsx │ │ │ ├── containers │ │ │ ├── StackFrame.tsx │ │ │ ├── StackFrameCodeBlock.tsx │ │ │ └── StackTrace.tsx │ │ │ └── utils │ │ │ ├── dom │ │ │ ├── absolutifyCaret.ts │ │ │ └── css.ts │ │ │ ├── generateAnsiHTML.ts │ │ │ ├── getLinesAround.ts │ │ │ ├── getPrettyURL.ts │ │ │ ├── getSourceMap.ts │ │ │ ├── getStackFrames.ts │ │ │ ├── isBultinErrorName.ts │ │ │ ├── isInternalFile.ts │ │ │ ├── mapper.ts │ │ │ ├── parseCompileError.ts │ │ │ ├── parser.ts │ │ │ ├── stack-frame.ts │ │ │ └── unmapper.ts │ ├── test │ │ ├── StackTraceTab.spec.tsx │ │ └── __snapshots__ │ │ │ └── StackTraceTab.spec.tsx.snap │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-inspector-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── demo.gif │ ├── demo │ │ ├── CHANGELOG.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── DemoApp.tsx │ │ │ ├── DevTools.tsx │ │ │ ├── getOptions.ts │ │ │ ├── index.tsx │ │ │ └── reducers.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── ActionList.tsx │ │ ├── ActionListHeader.tsx │ │ ├── ActionListRow.tsx │ │ ├── ActionPreview.tsx │ │ ├── ActionPreviewHeader.tsx │ │ ├── DevtoolsInspector.tsx │ │ ├── RightSlider.tsx │ │ ├── createDiffPatcher.ts │ │ ├── index.ts │ │ ├── redux.ts │ │ ├── tabs │ │ │ ├── ActionTab.tsx │ │ │ ├── DiffTab.tsx │ │ │ ├── JSONDiff.tsx │ │ │ ├── StateTab.tsx │ │ │ ├── getItemString.tsx │ │ │ └── getJsonTreeTheme.ts │ │ ├── themes │ │ │ ├── index.ts │ │ │ └── inspector.ts │ │ └── utils │ │ │ ├── getInspectedState.ts │ │ │ ├── isIterable.ts │ │ │ ├── selectorButtonStyles.ts │ │ │ └── themes.ts │ └── tsconfig.json ├── redux-devtools-instrument │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── getSymbolObservable.ts │ │ └── instrument.ts │ ├── test │ │ └── instrument.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-log-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── LogMonitor.tsx │ │ ├── LogMonitorButton.tsx │ │ ├── LogMonitorButtonBar.tsx │ │ ├── LogMonitorEntry.tsx │ │ ├── LogMonitorEntryAction.tsx │ │ ├── LogMonitorEntryList.tsx │ │ ├── actions.ts │ │ ├── brighten.ts │ │ ├── index.ts │ │ └── reducers.ts │ └── tsconfig.json ├── redux-devtools-remote │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── demo.gif │ ├── eslint.config.mjs │ ├── examples │ │ ├── buildAll.js │ │ ├── counter │ │ │ ├── .babelrc │ │ │ ├── actions │ │ │ │ └── counter.js │ │ │ ├── components │ │ │ │ └── Counter.js │ │ │ ├── containers │ │ │ │ └── App.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── reducers │ │ │ │ ├── counter.js │ │ │ │ └── index.js │ │ │ ├── server.js │ │ │ ├── store │ │ │ │ └── configureStore.js │ │ │ ├── test │ │ │ │ ├── actions │ │ │ │ │ └── counter.spec.js │ │ │ │ ├── components │ │ │ │ │ └── Counter.spec.js │ │ │ │ ├── containers │ │ │ │ │ └── App.spec.js │ │ │ │ ├── reducers │ │ │ │ │ └── counter.spec.js │ │ │ │ └── setup.js │ │ │ └── webpack.config.js │ │ ├── node-counter │ │ │ ├── index.js │ │ │ └── package.json │ │ ├── router │ │ │ ├── .babelrc │ │ │ ├── actions │ │ │ │ └── todos.js │ │ │ ├── components │ │ │ │ ├── Footer.js │ │ │ │ ├── Header.js │ │ │ │ ├── MainSection.js │ │ │ │ ├── TodoItem.js │ │ │ │ └── TodoTextInput.js │ │ │ ├── constants │ │ │ │ ├── ActionTypes.js │ │ │ │ └── TodoFilters.js │ │ │ ├── containers │ │ │ │ ├── App.js │ │ │ │ ├── Root.js │ │ │ │ └── Wrapper.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── reducers │ │ │ │ ├── index.js │ │ │ │ └── todos.js │ │ │ ├── server.js │ │ │ ├── store │ │ │ │ └── configureStore.js │ │ │ ├── test │ │ │ │ ├── actions │ │ │ │ │ └── todos.spec.js │ │ │ │ ├── components │ │ │ │ │ ├── Footer.spec.js │ │ │ │ │ ├── Header.spec.js │ │ │ │ │ ├── MainSection.spec.js │ │ │ │ │ ├── TodoItem.spec.js │ │ │ │ │ └── TodoTextInput.spec.js │ │ │ │ ├── reducers │ │ │ │ │ └── todos.spec.js │ │ │ │ └── setup.js │ │ │ └── webpack.config.js │ │ ├── todomvc │ │ │ ├── .babelrc │ │ │ ├── actions │ │ │ │ └── todos.js │ │ │ ├── components │ │ │ │ ├── Footer.js │ │ │ │ ├── Header.js │ │ │ │ ├── MainSection.js │ │ │ │ ├── TodoItem.js │ │ │ │ └── TodoTextInput.js │ │ │ ├── constants │ │ │ │ ├── ActionTypes.js │ │ │ │ └── TodoFilters.js │ │ │ ├── containers │ │ │ │ └── App.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── reducers │ │ │ │ ├── index.js │ │ │ │ └── todos.js │ │ │ ├── server.js │ │ │ ├── store │ │ │ │ └── configureStore.js │ │ │ ├── test │ │ │ │ ├── actions │ │ │ │ │ └── todos.spec.js │ │ │ │ ├── components │ │ │ │ │ ├── Footer.spec.js │ │ │ │ │ ├── Header.spec.js │ │ │ │ │ ├── MainSection.spec.js │ │ │ │ │ ├── TodoItem.spec.js │ │ │ │ │ └── TodoTextInput.spec.js │ │ │ │ ├── reducers │ │ │ │ │ └── todos.spec.js │ │ │ │ └── setup.js │ │ │ └── webpack.config.js │ │ └── toggle-monitoring │ │ │ ├── .babelrc │ │ │ ├── actions │ │ │ ├── counter.js │ │ │ └── monitoring.js │ │ │ ├── components │ │ │ └── Counter.js │ │ │ ├── containers │ │ │ └── App.js │ │ │ ├── index.html │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ ├── reducers │ │ │ ├── counter.js │ │ │ └── index.js │ │ │ ├── server.js │ │ │ ├── store │ │ │ └── configureStore.js │ │ │ ├── test │ │ │ ├── actions │ │ │ │ └── counter.spec.js │ │ │ ├── components │ │ │ │ └── Counter.spec.js │ │ │ ├── containers │ │ │ │ └── App.spec.js │ │ │ ├── reducers │ │ │ │ └── counter.spec.js │ │ │ └── setup.js │ │ │ └── webpack.config.js │ ├── package.json │ ├── src │ │ ├── configureStore.ts │ │ ├── constants.ts │ │ ├── devTools.ts │ │ └── index.ts │ └── tsconfig.json ├── redux-devtools-rtk-query-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── demo │ │ ├── CHANGELOG.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ └── mockServiceWorker.js │ │ ├── src │ │ │ ├── App.tsx │ │ │ ├── components │ │ │ │ └── ui │ │ │ │ │ ├── provider.tsx │ │ │ │ │ └── toaster.tsx │ │ │ ├── features │ │ │ │ ├── DevTools │ │ │ │ │ ├── DevTools.tsx │ │ │ │ │ ├── DevToolsSelector.tsx │ │ │ │ │ ├── config.ts │ │ │ │ │ └── helpers.ts │ │ │ │ ├── pokemon │ │ │ │ │ ├── Pokemon.tsx │ │ │ │ │ └── PokemonView.tsx │ │ │ │ └── posts │ │ │ │ │ ├── PostDetail.tsx │ │ │ │ │ ├── PostsManager.tsx │ │ │ │ │ └── PostsView.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── mocks │ │ │ │ ├── browser.ts │ │ │ │ └── db.ts │ │ │ ├── pokemon.data.ts │ │ │ ├── react-app-env.d.ts │ │ │ ├── services │ │ │ │ ├── pokemon.ts │ │ │ │ └── posts.ts │ │ │ └── store.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── monitor-demo.gif │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── ArrowUpIcon.tsx │ │ │ ├── NoRtkQueryApi.tsx │ │ │ ├── QueryForm.tsx │ │ │ ├── QueryList.tsx │ │ │ ├── QueryPreviewActions.tsx │ │ │ ├── QueryPreviewApi.tsx │ │ │ ├── QueryPreviewData.tsx │ │ │ ├── QueryPreviewHeader.tsx │ │ │ ├── QueryPreviewInfo.tsx │ │ │ ├── QueryPreviewSubscriptions.tsx │ │ │ ├── QueryPreviewTags.tsx │ │ │ ├── RegexIcon.tsx │ │ │ ├── SortOrderButton.tsx │ │ │ ├── TreeView.tsx │ │ │ └── UList.tsx │ │ ├── containers │ │ │ ├── QueryPreview.tsx │ │ │ ├── RtkQueryInspector.tsx │ │ │ ├── RtkQueryMonitor.tsx │ │ │ └── mapProps.tsx │ │ ├── index.ts │ │ ├── monitor-config.ts │ │ ├── reducers.ts │ │ ├── selectors.ts │ │ ├── styles │ │ │ ├── themes.ts │ │ │ └── tree.tsx │ │ ├── types.ts │ │ └── utils │ │ │ ├── a11y.ts │ │ │ ├── comparators.ts │ │ │ ├── filters.ts │ │ │ ├── formatters.ts │ │ │ ├── isIterable.ts │ │ │ ├── object.ts │ │ │ ├── regexp.ts │ │ │ ├── rtk-query.ts │ │ │ ├── statistics.ts │ │ │ └── tabs.ts │ ├── test │ │ ├── __mocks__ │ │ │ └── styleMock.ts │ │ ├── devtools.mocks.tsx │ │ ├── integration.spec.tsx │ │ └── rtk-query.mocks.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-serialize │ ├── CHANGELOG.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── constants │ │ │ └── options.ts │ │ ├── helpers │ │ │ └── index.ts │ │ ├── immutable │ │ │ ├── index.ts │ │ │ └── serialize.ts │ │ ├── index.ts │ │ └── types.ts │ ├── test │ │ ├── __snapshots__ │ │ │ ├── helpers.spec.ts.snap │ │ │ └── immutable.spec.ts.snap │ │ ├── helpers.spec.ts │ │ └── immutable.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-slider-monitor │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── examples │ │ └── todomvc │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── eslint.config.mjs │ │ │ ├── index.html │ │ │ ├── package.json │ │ │ ├── src │ │ │ ├── actions │ │ │ │ └── TodoActions.ts │ │ │ ├── components │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── MainSection.tsx │ │ │ │ ├── TodoItem.tsx │ │ │ │ └── TodoTextInput.tsx │ │ │ ├── constants │ │ │ │ ├── ActionTypes.ts │ │ │ │ └── TodoFilters.ts │ │ │ ├── containers │ │ │ │ ├── DevTools.tsx │ │ │ │ ├── Root.dev.tsx │ │ │ │ ├── Root.prod.tsx │ │ │ │ ├── Root.ts │ │ │ │ └── TodoApp.tsx │ │ │ ├── index.tsx │ │ │ ├── reducers │ │ │ │ ├── index.ts │ │ │ │ └── todos.ts │ │ │ └── store │ │ │ │ ├── configureStore.dev.ts │ │ │ │ ├── configureStore.prod.ts │ │ │ │ └── configureStore.ts │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.webpack.json │ │ │ └── webpack.config.ts │ ├── package.json │ ├── src │ │ ├── SliderButton.tsx │ │ ├── SliderMonitor.tsx │ │ ├── index.ts │ │ └── reducers.ts │ └── tsconfig.json ├── redux-devtools-ui │ ├── .gitignore │ ├── .storybook │ │ ├── main.ts │ │ └── preview.tsx │ ├── CHANGELOG.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── fonts │ │ ├── index.css │ │ ├── roboto-mono-v4-latin │ │ │ └── roboto-mono-v4-latin-regular.woff2 │ │ ├── roboto-v15-latin │ │ │ └── roboto-v15-latin-regular.woff2 │ │ ├── source-code-pro-v6-latin │ │ │ └── source-code-pro-v6-latin-regular.woff2 │ │ └── source-sans-pro-v9-latin │ │ │ ├── source-sans-pro-v9-latin-600.woff2 │ │ │ └── source-sans-pro-v9-latin-regular.woff2 │ ├── jest.config.cjs │ ├── package.json │ ├── src │ │ ├── Button │ │ │ ├── Button.stories.tsx │ │ │ ├── Button.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── common.ts │ │ │ │ ├── default.ts │ │ │ │ ├── index.ts │ │ │ │ └── material.ts │ │ ├── Container │ │ │ ├── index.tsx │ │ │ └── styles │ │ │ │ └── index.ts │ │ ├── ContextMenu │ │ │ ├── ContextMenu.stories.tsx │ │ │ ├── ContextMenu.tsx │ │ │ ├── data.ts │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ └── index.ts │ │ ├── Dialog │ │ │ ├── Dialog.stories.tsx │ │ │ ├── Dialog.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── default.ts │ │ │ │ ├── index.ts │ │ │ │ └── material.ts │ │ ├── Editor │ │ │ ├── Editor.stories.tsx │ │ │ ├── Editor.tsx │ │ │ ├── WithTabs.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ └── index.ts │ │ ├── Form │ │ │ ├── Form.stories.tsx │ │ │ ├── Form.tsx │ │ │ ├── index.ts │ │ │ ├── schema.ts │ │ │ ├── styles │ │ │ │ └── index.ts │ │ │ └── widgets.tsx │ │ ├── Notification │ │ │ ├── Notification.stories.tsx │ │ │ ├── Notification.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ └── index.ts │ │ ├── SegmentedControl │ │ │ ├── SegmentedControl.stories.tsx │ │ │ ├── SegmentedControl.tsx │ │ │ ├── index.tsx │ │ │ └── styles │ │ │ │ └── index.ts │ │ ├── Select │ │ │ ├── Select.stories.tsx │ │ │ ├── Select.tsx │ │ │ ├── index.ts │ │ │ └── options.ts │ │ ├── Slider │ │ │ ├── Slider.stories.tsx │ │ │ ├── Slider.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── common.ts │ │ │ │ ├── default.ts │ │ │ │ ├── index.ts │ │ │ │ └── material.ts │ │ ├── Tabs │ │ │ ├── Tabs.stories.tsx │ │ │ ├── Tabs.tsx │ │ │ ├── TabsHeader.tsx │ │ │ ├── data.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── common.ts │ │ │ │ ├── default.ts │ │ │ │ ├── index.ts │ │ │ │ └── material.ts │ │ ├── Toolbar │ │ │ ├── Toolbar.stories.tsx │ │ │ ├── index.ts │ │ │ └── styles │ │ │ │ ├── Divider.ts │ │ │ │ ├── Spacer.ts │ │ │ │ └── Toolbar.ts │ │ ├── colorSchemes │ │ │ ├── atom-one-dark.ts │ │ │ ├── default.ts │ │ │ ├── dracula.ts │ │ │ ├── github.ts │ │ │ ├── index.ts │ │ │ ├── ir-black.ts │ │ │ ├── macintosh.ts │ │ │ ├── materia.ts │ │ │ ├── oceanic-next.ts │ │ │ ├── phd.ts │ │ │ ├── pico.ts │ │ │ ├── solar-flare.ts │ │ │ ├── spacemacs.ts │ │ │ ├── unikitty.ts │ │ │ └── woodland.ts │ │ ├── index.ts │ │ ├── themes │ │ │ ├── default.ts │ │ │ ├── index.ts │ │ │ └── material.ts │ │ └── utils │ │ │ ├── animations.ts │ │ │ ├── autoPrefix.ts │ │ │ ├── color.ts │ │ │ ├── createStyledComponent.ts │ │ │ ├── createThemedComponent.tsx │ │ │ ├── invertColors.ts │ │ │ └── theme.ts │ ├── test │ │ ├── Button.test.tsx │ │ ├── Container.test.tsx │ │ ├── ContextMenu.test.tsx │ │ ├── Dialog.test.tsx │ │ ├── Editor.test.tsx │ │ ├── Form.test.tsx │ │ ├── Notification.test.tsx │ │ ├── SegmentedControl.test.tsx │ │ ├── Select.test.tsx │ │ ├── Slider.test.tsx │ │ ├── Tabs.test.tsx │ │ ├── Toolbar.test.tsx │ │ ├── __mocks__ │ │ │ └── styleMock.ts │ │ └── __snapshots__ │ │ │ ├── Button.test.tsx.snap │ │ │ ├── Container.test.tsx.snap │ │ │ ├── ContextMenu.test.tsx.snap │ │ │ ├── Dialog.test.tsx.snap │ │ │ ├── Editor.test.tsx.snap │ │ │ ├── Form.test.tsx.snap │ │ │ ├── Notification.test.tsx.snap │ │ │ ├── SegmentedControl.test.tsx.snap │ │ │ ├── Select.test.tsx.snap │ │ │ ├── Slider.test.tsx.snap │ │ │ ├── Tabs.test.tsx.snap │ │ │ └── Toolbar.test.tsx.snap │ ├── tsconfig.json │ └── tsconfig.test.json ├── redux-devtools-utils │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── package.json │ ├── src │ │ ├── catchErrors.ts │ │ ├── filters.ts │ │ ├── importState.ts │ │ └── index.ts │ └── tsconfig.json └── redux-devtools │ ├── CHANGELOG.md │ ├── LICENSE.md │ ├── README.md │ ├── babel.config.esm.json │ ├── babel.config.json │ ├── eslint.config.mjs │ ├── examples │ ├── counter │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── actions │ │ │ │ └── CounterActions.ts │ │ │ ├── components │ │ │ │ └── Counter.tsx │ │ │ ├── constants │ │ │ │ └── ActionTypes.ts │ │ │ ├── containers │ │ │ │ ├── CounterApp.tsx │ │ │ │ ├── DevTools.tsx │ │ │ │ ├── Root.dev.tsx │ │ │ │ ├── Root.prod.tsx │ │ │ │ └── Root.ts │ │ │ ├── index.tsx │ │ │ ├── reducers │ │ │ │ ├── counter.ts │ │ │ │ └── index.ts │ │ │ └── store │ │ │ │ ├── configureStore.dev.ts │ │ │ │ ├── configureStore.prod.ts │ │ │ │ └── configureStore.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ └── todomvc │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ ├── actions │ │ │ └── TodoActions.ts │ │ ├── components │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ ├── MainSection.tsx │ │ │ ├── TodoItem.tsx │ │ │ └── TodoTextInput.tsx │ │ ├── constants │ │ │ ├── ActionTypes.ts │ │ │ └── TodoFilters.ts │ │ ├── containers │ │ │ ├── DevTools.tsx │ │ │ ├── Root.dev.tsx │ │ │ ├── Root.prod.tsx │ │ │ ├── Root.ts │ │ │ └── TodoApp.tsx │ │ ├── index.tsx │ │ ├── reducers │ │ │ ├── index.ts │ │ │ └── todos.ts │ │ └── store │ │ │ ├── configureStore.dev.ts │ │ │ ├── configureStore.prod.ts │ │ │ └── configureStore.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.webpack.json │ │ └── webpack.config.ts │ ├── jest.config.cjs │ ├── package.json │ ├── src │ ├── createDevTools.tsx │ ├── index.ts │ └── persistState.ts │ ├── test │ ├── globalLocalStorage.d.ts │ └── persistState.spec.ts │ ├── tsconfig.json │ └── tsconfig.test.json ├── patches ├── @dnd-kit__core.patch ├── @dnd-kit__sortable.patch └── react-icons.patch ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── renovate.json ├── tsconfig.base.json ├── tsconfig.esm.base.json ├── tsconfig.esm.react.base.json └── tsconfig.react.base.json /.changeset/bright-sheep-joke.md: -------------------------------------------------------------------------------- 1 | --- 2 | '@redux-devtools/app-core': major 3 | '@redux-devtools/app': major 4 | '@redux-devtools/inspector-monitor-test-tab': major 5 | '@redux-devtools/rtk-query-monitor': major 6 | '@redux-devtools/slider-monitor': major 7 | '@redux-devtools/ui': major 8 | --- 9 | 10 | Replace styled-components with Emotion 11 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@1.6.4/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "linked": [], 6 | "access": "public", 7 | "baseBranch": "main", 8 | "updateInternalDependencies": "patch", 9 | "ignore": [], 10 | "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { 11 | "onlyUpdatePeerDependentsWhenOutOfRange": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .idea 3 | lib 4 | dist 5 | umd 6 | build 7 | coverage 8 | node_modules 9 | __snapshots__ 10 | storybook-static 11 | .vscode/* 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: Methuselah96 2 | open_collective: redux-devtools-extension 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | lib 5 | dist 6 | umd 7 | build 8 | coverage 9 | .idea 10 | .eslintcache 11 | !packages/redux-devtools-slider-monitor/examples/todomvc/dist/index.html 12 | .nx 13 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .idea 3 | lib 4 | dist 5 | umd 6 | build 7 | coverage 8 | node_modules 9 | __snapshots__ 10 | dev 11 | **/demo/public/** 12 | storybook-static 13 | .vscode/* 14 | pnpm-lock.yaml 15 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /eslint.js.config.base.mjs: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import eslintConfigPrettier from 'eslint-config-prettier'; 3 | 4 | export default [eslint.configs.recommended, eslintConfigPrettier]; 5 | -------------------------------------------------------------------------------- /extension/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /extension/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /extension/docs/API/README.md: -------------------------------------------------------------------------------- 1 | # API Reference 2 | 3 | - [Parameters](Arguments.md) 4 | - [Methods](Methods.md) 5 | -------------------------------------------------------------------------------- /extension/docs/Articles.md: -------------------------------------------------------------------------------- 1 | # Articles 2 | 3 | - [Improve your development workflow with Redux DevTools Extension](https://medium.com/@zalmoxis/improve-your-development-workflow-with-redux-devtools-extension-f0379227ff83) 4 | - [Using Redux DevTools in production](https://medium.com/@zalmoxis/using-redux-devtools-in-production-4c5b56c5600f) 5 | - [Redux DevTools without Redux](https://medium.com/@zalmoxis/redux-devtools-without-redux-or-how-to-have-a-predictable-state-with-any-architecture-61c5f5a7716f) 6 | -------------------------------------------------------------------------------- /extension/docs/Videos.md: -------------------------------------------------------------------------------- 1 | # Videos 2 | 3 | - [Debugging flux applications in production at React Europe 2016](https://youtu.be/YU8jQ2HtqH4) 4 | - [Hot Reloading with Time Travel at React Europe 2015](https://youtu.be/xsSnOQynTHs) 5 | - [Getting Started with Redux DevTools Extension](https://egghead.io/lessons/javascript-getting-started-with-redux-dev-tools) 6 | - [React & Redux With ExpressJS](https://www.youtube.com/watch?v=6ygcbRpZFR4) 7 | -------------------------------------------------------------------------------- /extension/examples/counter/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /extension/examples/counter/containers/App.js: -------------------------------------------------------------------------------- 1 | import { bindActionCreators } from 'redux'; 2 | import { connect } from 'react-redux'; 3 | import Counter from '../components/Counter'; 4 | import * as CounterActions from '../actions/counter'; 5 | 6 | function mapStateToProps(state) { 7 | return { 8 | counter: state.counter, 9 | }; 10 | } 11 | 12 | function mapDispatchToProps(dispatch) { 13 | return bindActionCreators(CounterActions, dispatch); 14 | } 15 | 16 | export default connect(mapStateToProps, mapDispatchToProps)(Counter); 17 | -------------------------------------------------------------------------------- /extension/examples/counter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux counter example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extension/examples/counter/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import App from './containers/App'; 5 | import configureStore from './store/configureStore'; 6 | 7 | const store = configureStore(); 8 | 9 | render( 10 | 11 | 12 | , 13 | document.getElementById('root'), 14 | ); 15 | -------------------------------------------------------------------------------- /extension/examples/counter/reducers/counter.js: -------------------------------------------------------------------------------- 1 | import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../actions/counter'; 2 | 3 | export default function counter(state = 0, action) { 4 | switch (action.type) { 5 | case INCREMENT_COUNTER: 6 | return state + 1; 7 | case DECREMENT_COUNTER: 8 | return state - 1; 9 | default: 10 | return state; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /extension/examples/counter/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import counter from './counter'; 3 | 4 | const rootReducer = combineReducers({ 5 | counter, 6 | }); 7 | 8 | export default rootReducer; 9 | -------------------------------------------------------------------------------- /extension/examples/counter/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /extension/examples/counter/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var webpack = require('webpack'); 3 | 4 | module.exports = { 5 | mode: 'development', 6 | devtool: 'source-map', 7 | entry: ['webpack-hot-middleware/client', './index'], 8 | output: { 9 | path: path.join(__dirname, 'dist'), 10 | filename: 'bundle.js', 11 | publicPath: '/static/', 12 | }, 13 | plugins: [new webpack.HotModuleReplacementPlugin()], 14 | module: { 15 | rules: [ 16 | { 17 | test: /\.js$/, 18 | loaders: ['babel-loader'], 19 | exclude: /node_modules/, 20 | }, 21 | ], 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /extension/examples/react-counter-messaging/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /extension/examples/react-counter-messaging/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | React counter example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extension/examples/react-counter-messaging/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import Counter from './components/Counter'; 4 | 5 | render(, document.getElementById('root')); 6 | -------------------------------------------------------------------------------- /extension/examples/react-counter-messaging/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var webpack = require('webpack'); 3 | 4 | module.exports = { 5 | mode: 'development', 6 | devtool: 'source-map', 7 | entry: ['./index'], 8 | output: { 9 | path: path.join(__dirname, 'dist'), 10 | filename: 'bundle.js', 11 | publicPath: '/static/', 12 | }, 13 | module: { 14 | rules: [ 15 | { 16 | test: /\.js$/, 17 | loaders: ['babel-loader'], 18 | exclude: /node_modules/, 19 | }, 20 | ], 21 | }, 22 | devServer: { 23 | port: 4004, 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /extension/examples/router/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"], 3 | "plugins": ["add-module-exports", "transform-decorators-legacy"] 4 | } 5 | -------------------------------------------------------------------------------- /extension/examples/router/actions/todos.js: -------------------------------------------------------------------------------- 1 | import * as types from '../constants/ActionTypes'; 2 | 3 | export function addTodo(text) { 4 | return { type: types.ADD_TODO, text }; 5 | } 6 | 7 | export function deleteTodo(id) { 8 | return { type: types.DELETE_TODO, id }; 9 | } 10 | 11 | export function editTodo(id, text) { 12 | return { type: types.EDIT_TODO, id, text }; 13 | } 14 | 15 | export function completeTodo(id) { 16 | return { type: types.COMPLETE_TODO, id }; 17 | } 18 | 19 | export function completeAll() { 20 | return { type: types.COMPLETE_ALL }; 21 | } 22 | 23 | export function clearCompleted() { 24 | return { type: types.CLEAR_COMPLETED }; 25 | } 26 | -------------------------------------------------------------------------------- /extension/examples/router/constants/ActionTypes.js: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const COMPLETE_TODO = 'COMPLETE_TODO'; 5 | export const COMPLETE_ALL = 'COMPLETE_ALL'; 6 | export const CLEAR_COMPLETED = 'CLEAR_COMPLETED'; 7 | -------------------------------------------------------------------------------- /extension/examples/router/constants/TodoFilters.js: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_COMPLETED = 'show_completed'; 3 | export const SHOW_ACTIVE = 'show_active'; 4 | -------------------------------------------------------------------------------- /extension/examples/router/containers/Root.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import { Route, Redirect } from 'react-router'; 4 | import { ReduxRouter } from 'redux-router'; 5 | import Wrapper from './Wrapper'; 6 | import App from './App'; 7 | 8 | class Root extends Component { 9 | render() { 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | 17 | ); 18 | } 19 | } 20 | 21 | export default Root; 22 | -------------------------------------------------------------------------------- /extension/examples/router/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux TodoMVC example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extension/examples/router/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill'; 2 | import React from 'react'; 3 | import { render } from 'react-dom'; 4 | import { Provider } from 'react-redux'; 5 | import Root from './containers/Root'; 6 | import configureStore from './store/configureStore'; 7 | import 'todomvc-app-css/index.css'; 8 | 9 | const store = configureStore(); 10 | 11 | render( 12 | 13 | 14 | , 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /extension/examples/router/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { routerStateReducer } from 'redux-router'; 3 | import todos from './todos'; 4 | 5 | const rootReducer = combineReducers({ 6 | todos, 7 | router: routerStateReducer, 8 | }); 9 | 10 | export default rootReducer; 11 | -------------------------------------------------------------------------------- /extension/examples/router/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /extension/examples/saga-counter/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /extension/examples/saga-counter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Redux Saga Counter example 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /extension/examples/saga-counter/src/reducers/index.js: -------------------------------------------------------------------------------- 1 | export default function counter(state = 0, action) { 2 | switch (action.type) { 3 | case 'INCREMENT': 4 | return state + 1; 5 | case 'INCREMENT_IF_ODD': 6 | return state % 2 !== 0 ? state + 1 : state; 7 | case 'DECREMENT': 8 | return state - 1; 9 | default: 10 | return state; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /extension/examples/saga-counter/src/sagas/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-constant-condition */ 2 | 3 | import { takeEvery } from 'redux-saga'; 4 | import { put, call } from 'redux-saga/effects'; 5 | import { delay } from 'redux-saga'; 6 | 7 | export function* incrementAsync() { 8 | yield call(delay, 1000); 9 | yield put({ type: 'INCREMENT' }); 10 | } 11 | 12 | export default function* rootSaga() { 13 | yield* takeEvery('INCREMENT_ASYNC', incrementAsync); 14 | } 15 | -------------------------------------------------------------------------------- /extension/examples/saga-counter/webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var webpack = require('webpack'); 3 | 4 | module.exports = { 5 | mode: 'development', 6 | devtool: 'source-map', 7 | entry: [path.join(__dirname, 'src', 'main')], 8 | output: { 9 | path: path.join(__dirname, 'dist'), 10 | filename: 'bundle.js', 11 | publicPath: '/static/', 12 | }, 13 | module: { 14 | rules: [ 15 | { 16 | test: /\.js$/, 17 | loaders: ['babel-loader'], 18 | exclude: /node_modules/, 19 | }, 20 | ], 21 | }, 22 | devServer: { 23 | port: 4003, 24 | }, 25 | }; 26 | -------------------------------------------------------------------------------- /extension/examples/todomvc/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /extension/examples/todomvc/actions/index.js: -------------------------------------------------------------------------------- 1 | export * from './todos'; 2 | -------------------------------------------------------------------------------- /extension/examples/todomvc/actions/todos.js: -------------------------------------------------------------------------------- 1 | import * as types from '../constants/ActionTypes'; 2 | 3 | export function addTodo(text) { 4 | return { type: types.ADD_TODO, text }; 5 | } 6 | 7 | export function deleteTodo(id) { 8 | return { type: types.DELETE_TODO, id }; 9 | } 10 | 11 | export function editTodo(id, text) { 12 | return { type: types.EDIT_TODO, id, text }; 13 | } 14 | 15 | export function completeTodo(id) { 16 | return { type: types.COMPLETE_TODO, id }; 17 | } 18 | 19 | export function completeAll() { 20 | return { type: types.COMPLETE_ALL }; 21 | } 22 | 23 | export function clearCompleted() { 24 | return { type: types.CLEAR_COMPLETED }; 25 | } 26 | -------------------------------------------------------------------------------- /extension/examples/todomvc/constants/ActionTypes.js: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const COMPLETE_TODO = 'COMPLETE_TODO'; 5 | export const COMPLETE_ALL = 'COMPLETE_ALL'; 6 | export const CLEAR_COMPLETED = 'CLEAR_COMPLETED'; 7 | -------------------------------------------------------------------------------- /extension/examples/todomvc/constants/TodoFilters.js: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_COMPLETED = 'show_completed'; 3 | export const SHOW_ACTIVE = 'show_active'; 4 | -------------------------------------------------------------------------------- /extension/examples/todomvc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux TodoMVC example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extension/examples/todomvc/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill'; 2 | import React from 'react'; 3 | import { render } from 'react-dom'; 4 | import { Provider } from 'react-redux'; 5 | import App from './containers/App'; 6 | import configureStore from './store/configureStore'; 7 | import 'todomvc-app-css/index.css'; 8 | 9 | const store = configureStore(); 10 | 11 | render( 12 | 13 | 14 | , 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /extension/examples/todomvc/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import todos from './todos'; 3 | 4 | const rootReducer = combineReducers({ 5 | todos, 6 | }); 7 | 8 | export default rootReducer; 9 | -------------------------------------------------------------------------------- /extension/examples/todomvc/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /extension/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | setupFilesAfterEnv: ['/test/setup.js'], 3 | testPathIgnorePatterns: ['/examples'], 4 | testEnvironment: 'jsdom', 5 | moduleNameMapper: { 6 | '\\.css$': '/test/__mocks__/styleMock.js', 7 | }, 8 | transformIgnorePatterns: [ 9 | 'node_modules/(?!.pnpm|@babel/code-frame|@babel/highlight|@babel/helper-validator-identifier|chalk|color|d3|dateformat|delaunator|internmap|jsondiffpatch|lodash-es|nanoid|robust-predicates|uuid)', 10 | ], 11 | }; 12 | -------------------------------------------------------------------------------- /extension/src/assets/img/logo/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/128x128.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/16x16.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/38x38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/38x38.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/48x48.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/error.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/gray.png -------------------------------------------------------------------------------- /extension/src/assets/img/logo/scalable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/extension/src/assets/img/logo/scalable.png -------------------------------------------------------------------------------- /extension/src/background/store/backgroundReducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers, Reducer } from 'redux'; 2 | import { instances, InstancesState } from '@redux-devtools/app'; 3 | import { BackgroundAction } from './backgroundStore'; 4 | 5 | export interface BackgroundState { 6 | readonly instances: InstancesState; 7 | } 8 | 9 | const rootReducer: Reducer< 10 | BackgroundState, 11 | BackgroundAction, 12 | Partial 13 | > = combineReducers({ 14 | instances, 15 | }) as any; 16 | 17 | export default rootReducer; 18 | -------------------------------------------------------------------------------- /extension/src/devpanel/devpanel.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | 3 | html 4 | head 5 | meta(charset='UTF-8') 6 | title Redux DevTools 7 | include ../style.pug 8 | 9 | body 10 | #root 11 | div(style='display: flex; justify-content: center; align-items: center') 12 | img( 13 | src='/img/loading.svg', 14 | height=300, width=350, 15 | ) 16 | link(href='/devpanel.bundle.css', rel='stylesheet') 17 | script(src='/devpanel.bundle.js') 18 | -------------------------------------------------------------------------------- /extension/src/devpanel/store/panelReducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers, Reducer } from 'redux'; 2 | import { 3 | connection, 4 | instances, 5 | monitor, 6 | notification, 7 | reports, 8 | section, 9 | socket, 10 | stateTreeSettings, 11 | StoreAction, 12 | StoreState, 13 | theme, 14 | } from '@redux-devtools/app'; 15 | 16 | const rootReducer: Reducer< 17 | StoreState, 18 | StoreAction, 19 | Partial 20 | > = combineReducers({ 21 | instances, 22 | monitor, 23 | reports, 24 | notification, 25 | section, 26 | socket, 27 | theme, 28 | connection, 29 | stateTreeSettings, 30 | }) as any; 31 | 32 | export default rootReducer; 33 | -------------------------------------------------------------------------------- /extension/src/devtools/devtools.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | 3 | html 4 | head 5 | meta(charset='UTF-8') 6 | title Redux DevTools 7 | 8 | body 9 | #root 10 | script(src='/devtools.bundle.js') 11 | -------------------------------------------------------------------------------- /extension/src/devtools/index.ts: -------------------------------------------------------------------------------- 1 | chrome.devtools.panels.create( 2 | 'Redux', 3 | 'img/logo/scalable.png', 4 | 'devpanel.html', 5 | () => { 6 | // do nothing. 7 | }, 8 | ); 9 | -------------------------------------------------------------------------------- /extension/src/pageScript/api/generateInstanceId.ts: -------------------------------------------------------------------------------- 1 | let id = 0; 2 | 3 | export default function generateId(instanceId: number | undefined) { 4 | return instanceId || ++id; 5 | } 6 | -------------------------------------------------------------------------------- /extension/src/pageScript/api/openWindow.ts: -------------------------------------------------------------------------------- 1 | import { Action } from 'redux'; 2 | import type { PageScriptToContentScriptMessage } from './index'; 3 | 4 | export type Position = 'window' | 'remote'; 5 | 6 | function post>( 7 | message: PageScriptToContentScriptMessage, 8 | ) { 9 | window.postMessage(message, '*'); 10 | } 11 | 12 | export default function openWindow(position?: Position) { 13 | post({ 14 | source: '@devtools-page', 15 | type: 'OPEN', 16 | position: position ?? 'window', 17 | }); 18 | } 19 | -------------------------------------------------------------------------------- /extension/src/remote/remote.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | 3 | html 4 | head 5 | meta(charset='UTF-8') 6 | title RemoteDev 7 | include ../style.pug 8 | 9 | body 10 | #root 11 | link(href='/remote.bundle.css', rel='stylesheet') 12 | script(src='/remote.bundle.js') 13 | -------------------------------------------------------------------------------- /extension/test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "UI": true 7 | }, 8 | "rules": { 9 | "no-unused-expressions": 0 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /extension/test/__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /extension/test/electron/fixture/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Electron Test 6 | 7 | 8 | 0 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /extension/test/electron/fixture/main.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { app, BrowserWindow, session } = require('electron'); 3 | 4 | app.on('window-all-closed', app.quit); 5 | app.whenReady().then(async () => { 6 | await session.defaultSession.loadExtension( 7 | path.join(__dirname, '../../../dist'), 8 | { allowFileAccess: true }, 9 | ); 10 | 11 | const mainWindow = new BrowserWindow({ 12 | width: 150, 13 | height: 100, 14 | webPreferences: { 15 | nodeIntegration: true, 16 | contextIsolation: false, 17 | }, 18 | }); 19 | mainWindow.loadFile('index.html'); 20 | mainWindow.webContents.openDevTools({ mode: 'detach' }); 21 | }); 22 | -------------------------------------------------------------------------------- /extension/test/electron/fixture/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "electron-test", 3 | "productName": "Electron Test", 4 | "main": "main.js", 5 | "version": "0.1.0" 6 | } 7 | -------------------------------------------------------------------------------- /extension/test/electron/fixture/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | mode: 'development', 5 | entry: './test/electron/fixture/src/renderer.js', 6 | output: { 7 | filename: 'renderer.js', 8 | path: path.resolve(__dirname, 'dist'), 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /extension/test/setup.js: -------------------------------------------------------------------------------- 1 | global.chrome = require('sinon-chrome'); 2 | require('@testing-library/jest-dom'); 3 | 4 | jest.setTimeout(50000); 5 | -------------------------------------------------------------------------------- /extension/test/utils/inject.js: -------------------------------------------------------------------------------- 1 | export function insertScript(str) { 2 | const s = window.document.createElement('script'); 3 | s.appendChild(document.createTextNode(str)); 4 | (document.head || document.documentElement).appendChild(s); 5 | } 6 | 7 | export function listenMessage(f) { 8 | return new Promise((resolve) => { 9 | const listener = (event) => { 10 | const message = event.data; 11 | window.removeEventListener('message', listener); 12 | resolve(message); 13 | }; 14 | window.addEventListener('message', listener); 15 | if (f) f(); 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /extension/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["chrome"] 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: ['/extension', '/packages/*'], 3 | }; 4 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | { 8 | ignores: ['examples', 'lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/examples/tree/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # d3-state-visualizer-tree-example 2 | 3 | ## 0.1.6 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies [191d419] 8 | - d3-state-visualizer@3.0.0 9 | - map2tree@4.0.0 10 | 11 | ## 0.1.5 12 | 13 | ### Patch Changes 14 | 15 | - Updated dependencies [b323f77d] 16 | - Updated dependencies [b323f77d] 17 | - d3-state-visualizer@2.0.0 18 | - map2tree@3.0.0 19 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/examples/tree/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../../eslint.ts.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/examples/tree/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.base.json", 3 | "include": ["src"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/examples/tree/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/src/charts/index.ts: -------------------------------------------------------------------------------- 1 | export type { HierarchyPointNode } from 'd3'; 2 | export type { StyleValue } from 'd3tooltip'; 3 | export { default as tree } from './tree/tree.js'; 4 | export type { Node, Options } from './tree/tree.js'; 5 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/src/charts/tree/sortAndSerialize.ts: -------------------------------------------------------------------------------- 1 | function sortObject(obj: unknown, strict?: boolean) { 2 | if (obj instanceof Array) { 3 | let ary; 4 | if (strict) { 5 | ary = obj.sort(); 6 | } else { 7 | ary = obj; 8 | } 9 | return ary; 10 | } 11 | 12 | if (obj && typeof obj === 'object') { 13 | const tObj: { [key: string]: unknown } = {}; 14 | Object.keys(obj) 15 | .sort() 16 | .forEach((key) => (tObj[key] = sortObject(obj[key as keyof typeof obj]))); 17 | return tObj; 18 | } 19 | 20 | return obj; 21 | } 22 | 23 | export default function sortAndSerialize(obj: unknown) { 24 | return JSON.stringify(sortObject(obj, true), undefined, 2); 25 | } 26 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/src/index.ts: -------------------------------------------------------------------------------- 1 | export { tree } from './charts/index.js'; 2 | export type { 3 | HierarchyPointNode, 4 | Node, 5 | Options, 6 | StyleValue, 7 | } from './charts/index.js'; 8 | -------------------------------------------------------------------------------- /packages/d3-state-visualizer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/d3tooltip/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | { 8 | ignores: ['lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/d3tooltip/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/map2tree/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTs(import.meta.dirname), 8 | ...eslintTsJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/map2tree/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extensionsToTreatAsEsm: ['.ts'], 3 | moduleNameMapper: { 4 | '^(\\.{1,2}/.*)\\.js$': '$1', 5 | }, 6 | transform: { 7 | '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.test.json', useESM: true }], 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /packages/map2tree/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/map2tree/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-base16-styling/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTs(import.meta.dirname), 8 | ...eslintTsJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/react-base16-styling/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: 'jsdom', 3 | extensionsToTreatAsEsm: ['.ts'], 4 | moduleNameMapper: { 5 | '^(\\.{1,2}/.*)\\.js$': '$1', 6 | }, 7 | transform: { 8 | '^.+\\.ts$': ['ts-jest', { tsconfig: 'tsconfig.test.json', useESM: true }], 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/apathy.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'apathy', 3 | author: 'jannik siebert (https://github.com/janniks)', 4 | base00: '#031A16', 5 | base01: '#0B342D', 6 | base02: '#184E45', 7 | base03: '#2B685E', 8 | base04: '#5F9C92', 9 | base05: '#81B5AC', 10 | base06: '#A7CEC8', 11 | base07: '#D2E7E4', 12 | base08: '#3E9688', 13 | base09: '#3E7996', 14 | base0A: '#3E4C96', 15 | base0B: '#883E96', 16 | base0C: '#963E4C', 17 | base0D: '#96883E', 18 | base0E: '#4C963E', 19 | base0F: '#3E965B', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/ashes.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'ashes', 3 | author: 'jannik siebert (https://github.com/janniks)', 4 | base00: '#1C2023', 5 | base01: '#393F45', 6 | base02: '#565E65', 7 | base03: '#747C84', 8 | base04: '#ADB3BA', 9 | base05: '#C7CCD1', 10 | base06: '#DFE2E5', 11 | base07: '#F3F4F5', 12 | base08: '#C7AE95', 13 | base09: '#C7C795', 14 | base0A: '#AEC795', 15 | base0B: '#95C7AE', 16 | base0C: '#95AEC7', 17 | base0D: '#AE95C7', 18 | base0E: '#C795AE', 19 | base0F: '#C79595', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/atelier-dune.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atelier dune', 3 | author: 4 | 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)', 5 | base00: '#20201d', 6 | base01: '#292824', 7 | base02: '#6e6b5e', 8 | base03: '#7d7a68', 9 | base04: '#999580', 10 | base05: '#a6a28c', 11 | base06: '#e8e4cf', 12 | base07: '#fefbec', 13 | base08: '#d73737', 14 | base09: '#b65611', 15 | base0A: '#cfb017', 16 | base0B: '#60ac39', 17 | base0C: '#1fad83', 18 | base0D: '#6684e1', 19 | base0E: '#b854d4', 20 | base0F: '#d43552', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/atelier-forest.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atelier forest', 3 | author: 4 | 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest)', 5 | base00: '#1b1918', 6 | base01: '#2c2421', 7 | base02: '#68615e', 8 | base03: '#766e6b', 9 | base04: '#9c9491', 10 | base05: '#a8a19f', 11 | base06: '#e6e2e0', 12 | base07: '#f1efee', 13 | base08: '#f22c40', 14 | base09: '#df5320', 15 | base0A: '#d5911a', 16 | base0B: '#5ab738', 17 | base0C: '#00ad9c', 18 | base0D: '#407ee7', 19 | base0E: '#6666ea', 20 | base0F: '#c33ff3', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/atelier-heath.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atelier heath', 3 | author: 4 | 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath)', 5 | base00: '#1b181b', 6 | base01: '#292329', 7 | base02: '#695d69', 8 | base03: '#776977', 9 | base04: '#9e8f9e', 10 | base05: '#ab9bab', 11 | base06: '#d8cad8', 12 | base07: '#f7f3f7', 13 | base08: '#ca402b', 14 | base09: '#a65926', 15 | base0A: '#bb8a35', 16 | base0B: '#379a37', 17 | base0C: '#159393', 18 | base0D: '#516aec', 19 | base0E: '#7b59c0', 20 | base0F: '#cc33cc', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/atelier-lakeside.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atelier lakeside', 3 | author: 4 | 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/)', 5 | base00: '#161b1d', 6 | base01: '#1f292e', 7 | base02: '#516d7b', 8 | base03: '#5a7b8c', 9 | base04: '#7195a8', 10 | base05: '#7ea2b4', 11 | base06: '#c1e4f6', 12 | base07: '#ebf8ff', 13 | base08: '#d22d72', 14 | base09: '#935c25', 15 | base0A: '#8a8a0f', 16 | base0B: '#568c3b', 17 | base0C: '#2d8f6f', 18 | base0D: '#257fad', 19 | base0E: '#5d5db1', 20 | base0F: '#b72dd2', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/atelier-seaside.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atelier seaside', 3 | author: 4 | 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/)', 5 | base00: '#131513', 6 | base01: '#242924', 7 | base02: '#5e6e5e', 8 | base03: '#687d68', 9 | base04: '#809980', 10 | base05: '#8ca68c', 11 | base06: '#cfe8cf', 12 | base07: '#f0fff0', 13 | base08: '#e6193c', 14 | base09: '#87711d', 15 | base0A: '#c3c322', 16 | base0B: '#29a329', 17 | base0C: '#1999b3', 18 | base0D: '#3d62f5', 19 | base0E: '#ad2bee', 20 | base0F: '#e619c3', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/bespin.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'bespin', 3 | author: 'jan t. sott', 4 | base00: '#28211c', 5 | base01: '#36312e', 6 | base02: '#5e5d5c', 7 | base03: '#666666', 8 | base04: '#797977', 9 | base05: '#8a8986', 10 | base06: '#9d9b97', 11 | base07: '#baae9e', 12 | base08: '#cf6a4c', 13 | base09: '#cf7d34', 14 | base0A: '#f9ee98', 15 | base0B: '#54be0d', 16 | base0C: '#afc4db', 17 | base0D: '#5ea6ea', 18 | base0E: '#9b859d', 19 | base0F: '#937121', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/brewer.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'brewer', 3 | author: 'timothée poisot (http://github.com/tpoisot)', 4 | base00: '#0c0d0e', 5 | base01: '#2e2f30', 6 | base02: '#515253', 7 | base03: '#737475', 8 | base04: '#959697', 9 | base05: '#b7b8b9', 10 | base06: '#dadbdc', 11 | base07: '#fcfdfe', 12 | base08: '#e31a1c', 13 | base09: '#e6550d', 14 | base0A: '#dca060', 15 | base0B: '#31a354', 16 | base0C: '#80b1d3', 17 | base0D: '#3182bd', 18 | base0E: '#756bb1', 19 | base0F: '#b15928', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/bright.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'bright', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#000000', 5 | base01: '#303030', 6 | base02: '#505050', 7 | base03: '#b0b0b0', 8 | base04: '#d0d0d0', 9 | base05: '#e0e0e0', 10 | base06: '#f5f5f5', 11 | base07: '#ffffff', 12 | base08: '#fb0120', 13 | base09: '#fc6d24', 14 | base0A: '#fda331', 15 | base0B: '#a1c659', 16 | base0C: '#76c7b7', 17 | base0D: '#6fb3d2', 18 | base0E: '#d381c3', 19 | base0F: '#be643c', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/chalk.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'chalk', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#151515', 5 | base01: '#202020', 6 | base02: '#303030', 7 | base03: '#505050', 8 | base04: '#b0b0b0', 9 | base05: '#d0d0d0', 10 | base06: '#e0e0e0', 11 | base07: '#f5f5f5', 12 | base08: '#fb9fb1', 13 | base09: '#eda987', 14 | base0A: '#ddb26f', 15 | base0B: '#acc267', 16 | base0C: '#12cfc0', 17 | base0D: '#6fc2ef', 18 | base0E: '#e1a3ee', 19 | base0F: '#deaf8f', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/codeschool.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'codeschool', 3 | author: 'brettof86', 4 | base00: '#232c31', 5 | base01: '#1c3657', 6 | base02: '#2a343a', 7 | base03: '#3f4944', 8 | base04: '#84898c', 9 | base05: '#9ea7a6', 10 | base06: '#a7cfa3', 11 | base07: '#b5d8f6', 12 | base08: '#2a5491', 13 | base09: '#43820d', 14 | base0A: '#a03b1e', 15 | base0B: '#237986', 16 | base0C: '#b02f30', 17 | base0D: '#484d79', 18 | base0E: '#c59820', 19 | base0F: '#c98344', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/colors.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'colors', 3 | author: 'mrmrs (http://clrs.cc)', 4 | base00: '#111111', 5 | base01: '#333333', 6 | base02: '#555555', 7 | base03: '#777777', 8 | base04: '#999999', 9 | base05: '#bbbbbb', 10 | base06: '#dddddd', 11 | base07: '#ffffff', 12 | base08: '#ff4136', 13 | base09: '#ff851b', 14 | base0A: '#ffdc00', 15 | base0B: '#2ecc40', 16 | base0C: '#7fdbff', 17 | base0D: '#0074d9', 18 | base0E: '#b10dc9', 19 | base0F: '#85144b', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/default.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'default', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#181818', 5 | base01: '#282828', 6 | base02: '#383838', 7 | base03: '#585858', 8 | base04: '#b8b8b8', 9 | base05: '#d8d8d8', 10 | base06: '#e8e8e8', 11 | base07: '#f8f8f8', 12 | base08: '#ab4642', 13 | base09: '#dc9656', 14 | base0A: '#f7ca88', 15 | base0B: '#a1b56c', 16 | base0C: '#86c1b9', 17 | base0D: '#7cafc2', 18 | base0E: '#ba8baf', 19 | base0F: '#a16946', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/eighties.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'eighties', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#2d2d2d', 5 | base01: '#393939', 6 | base02: '#515151', 7 | base03: '#747369', 8 | base04: '#a09f93', 9 | base05: '#d3d0c8', 10 | base06: '#e8e6df', 11 | base07: '#f2f0ec', 12 | base08: '#f2777a', 13 | base09: '#f99157', 14 | base0A: '#ffcc66', 15 | base0B: '#99cc99', 16 | base0C: '#66cccc', 17 | base0D: '#6699cc', 18 | base0E: '#cc99cc', 19 | base0F: '#d27b53', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/embers.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'embers', 3 | author: 'jannik siebert (https://github.com/janniks)', 4 | base00: '#16130F', 5 | base01: '#2C2620', 6 | base02: '#433B32', 7 | base03: '#5A5047', 8 | base04: '#8A8075', 9 | base05: '#A39A90', 10 | base06: '#BEB6AE', 11 | base07: '#DBD6D1', 12 | base08: '#826D57', 13 | base09: '#828257', 14 | base0A: '#6D8257', 15 | base0B: '#57826D', 16 | base0C: '#576D82', 17 | base0D: '#6D5782', 18 | base0E: '#82576D', 19 | base0F: '#825757', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/flat.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'flat', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#2C3E50', 5 | base01: '#34495E', 6 | base02: '#7F8C8D', 7 | base03: '#95A5A6', 8 | base04: '#BDC3C7', 9 | base05: '#e0e0e0', 10 | base06: '#f5f5f5', 11 | base07: '#ECF0F1', 12 | base08: '#E74C3C', 13 | base09: '#E67E22', 14 | base0A: '#F1C40F', 15 | base0B: '#2ECC71', 16 | base0C: '#1ABC9C', 17 | base0D: '#3498DB', 18 | base0E: '#9B59B6', 19 | base0F: '#be643c', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/google.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'google', 3 | author: 'seth wright (http://sethawright.com)', 4 | base00: '#1d1f21', 5 | base01: '#282a2e', 6 | base02: '#373b41', 7 | base03: '#969896', 8 | base04: '#b4b7b4', 9 | base05: '#c5c8c6', 10 | base06: '#e0e0e0', 11 | base07: '#ffffff', 12 | base08: '#CC342B', 13 | base09: '#F96A38', 14 | base0A: '#FBA922', 15 | base0B: '#198844', 16 | base0C: '#3971ED', 17 | base0D: '#3971ED', 18 | base0E: '#A36AC7', 19 | base0F: '#3971ED', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/grayscale.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'grayscale', 3 | author: 'alexandre gavioli (https://github.com/alexx2/)', 4 | base00: '#101010', 5 | base01: '#252525', 6 | base02: '#464646', 7 | base03: '#525252', 8 | base04: '#ababab', 9 | base05: '#b9b9b9', 10 | base06: '#e3e3e3', 11 | base07: '#f7f7f7', 12 | base08: '#7c7c7c', 13 | base09: '#999999', 14 | base0A: '#a0a0a0', 15 | base0B: '#8e8e8e', 16 | base0C: '#868686', 17 | base0D: '#686868', 18 | base0E: '#747474', 19 | base0F: '#5e5e5e', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/greenscreen.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'green screen', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#001100', 5 | base01: '#003300', 6 | base02: '#005500', 7 | base03: '#007700', 8 | base04: '#009900', 9 | base05: '#00bb00', 10 | base06: '#00dd00', 11 | base07: '#00ff00', 12 | base08: '#007700', 13 | base09: '#009900', 14 | base0A: '#007700', 15 | base0B: '#00bb00', 16 | base0C: '#005500', 17 | base0D: '#009900', 18 | base0E: '#00bb00', 19 | base0F: '#005500', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/harmonic.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'harmonic16', 3 | author: 'jannik siebert (https://github.com/janniks)', 4 | base00: '#0b1c2c', 5 | base01: '#223b54', 6 | base02: '#405c79', 7 | base03: '#627e99', 8 | base04: '#aabcce', 9 | base05: '#cbd6e2', 10 | base06: '#e5ebf1', 11 | base07: '#f7f9fb', 12 | base08: '#bf8b56', 13 | base09: '#bfbf56', 14 | base0A: '#8bbf56', 15 | base0B: '#56bf8b', 16 | base0C: '#568bbf', 17 | base0D: '#8b56bf', 18 | base0E: '#bf568b', 19 | base0F: '#bf5656', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/hopscotch.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'hopscotch', 3 | author: 'jan t. sott', 4 | base00: '#322931', 5 | base01: '#433b42', 6 | base02: '#5c545b', 7 | base03: '#797379', 8 | base04: '#989498', 9 | base05: '#b9b5b8', 10 | base06: '#d5d3d5', 11 | base07: '#ffffff', 12 | base08: '#dd464c', 13 | base09: '#fd8b19', 14 | base0A: '#fdcc59', 15 | base0B: '#8fc13e', 16 | base0C: '#149b93', 17 | base0D: '#1290bf', 18 | base0E: '#c85e7c', 19 | base0F: '#b33508', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/isotope.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'isotope', 3 | author: 'jan t. sott', 4 | base00: '#000000', 5 | base01: '#404040', 6 | base02: '#606060', 7 | base03: '#808080', 8 | base04: '#c0c0c0', 9 | base05: '#d0d0d0', 10 | base06: '#e0e0e0', 11 | base07: '#ffffff', 12 | base08: '#ff0000', 13 | base09: '#ff9900', 14 | base0A: '#ff0099', 15 | base0B: '#33ff00', 16 | base0C: '#00ffff', 17 | base0D: '#0066ff', 18 | base0E: '#cc00ff', 19 | base0F: '#3300ff', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/marrakesh.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'marrakesh', 3 | author: 'alexandre gavioli (http://github.com/alexx2/)', 4 | base00: '#201602', 5 | base01: '#302e00', 6 | base02: '#5f5b17', 7 | base03: '#6c6823', 8 | base04: '#86813b', 9 | base05: '#948e48', 10 | base06: '#ccc37a', 11 | base07: '#faf0a5', 12 | base08: '#c35359', 13 | base09: '#b36144', 14 | base0A: '#a88339', 15 | base0B: '#18974e', 16 | base0C: '#75a738', 17 | base0D: '#477ca1', 18 | base0E: '#8868b3', 19 | base0F: '#b3588e', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/mocha.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'mocha', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#3B3228', 5 | base01: '#534636', 6 | base02: '#645240', 7 | base03: '#7e705a', 8 | base04: '#b8afad', 9 | base05: '#d0c8c6', 10 | base06: '#e9e1dd', 11 | base07: '#f5eeeb', 12 | base08: '#cb6077', 13 | base09: '#d28b71', 14 | base0A: '#f4bc87', 15 | base0B: '#beb55b', 16 | base0C: '#7bbda4', 17 | base0D: '#8ab3b5', 18 | base0E: '#a89bb9', 19 | base0F: '#bb9584', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/monokai.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'monokai', 3 | author: 'wimer hazenberg (http://www.monokai.nl)', 4 | base00: '#272822', 5 | base01: '#383830', 6 | base02: '#49483e', 7 | base03: '#75715e', 8 | base04: '#a59f85', 9 | base05: '#f8f8f2', 10 | base06: '#f5f4f1', 11 | base07: '#f9f8f5', 12 | base08: '#f92672', 13 | base09: '#fd971f', 14 | base0A: '#f4bf75', 15 | base0B: '#a6e22e', 16 | base0C: '#a1efe4', 17 | base0D: '#66d9ef', 18 | base0E: '#ae81ff', 19 | base0F: '#cc6633', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/nicinabox.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'nicinabox', 3 | author: 'nicinabox (http://github.com/nicinabox)', 4 | base00: '#2A2F3A', 5 | base01: '#3C444F', 6 | base02: '#4F5A65', 7 | base03: '#BEBEBE', 8 | base04: '#b0b0b0', // based on ocean theme 9 | base05: '#d0d0d0', // based on ocean theme 10 | base06: '#FFFFFF', 11 | base07: '#f5f5f5', // based on ocean theme 12 | base08: '#fb9fb1', // based on ocean theme 13 | base09: '#FC6D24', 14 | base0A: '#ddb26f', // based on ocean theme 15 | base0B: '#A1C659', 16 | base0C: '#12cfc0', // based on ocean theme 17 | base0D: '#6FB3D2', 18 | base0E: '#D381C3', 19 | base0F: '#deaf8f', // based on ocean theme 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/ocean.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'ocean', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#2b303b', 5 | base01: '#343d46', 6 | base02: '#4f5b66', 7 | base03: '#65737e', 8 | base04: '#a7adba', 9 | base05: '#c0c5ce', 10 | base06: '#dfe1e8', 11 | base07: '#eff1f5', 12 | base08: '#bf616a', 13 | base09: '#d08770', 14 | base0A: '#ebcb8b', 15 | base0B: '#a3be8c', 16 | base0C: '#96b5b4', 17 | base0D: '#8fa1b3', 18 | base0E: '#b48ead', 19 | base0F: '#ab7967', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/paraiso.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'paraiso', 3 | author: 'jan t. sott', 4 | base00: '#2f1e2e', 5 | base01: '#41323f', 6 | base02: '#4f424c', 7 | base03: '#776e71', 8 | base04: '#8d8687', 9 | base05: '#a39e9b', 10 | base06: '#b9b6b0', 11 | base07: '#e7e9db', 12 | base08: '#ef6155', 13 | base09: '#f99b15', 14 | base0A: '#fec418', 15 | base0B: '#48b685', 16 | base0C: '#5bc4bf', 17 | base0D: '#06b6ef', 18 | base0E: '#815ba4', 19 | base0F: '#e96ba8', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/pop.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'pop', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#000000', 5 | base01: '#202020', 6 | base02: '#303030', 7 | base03: '#505050', 8 | base04: '#b0b0b0', 9 | base05: '#d0d0d0', 10 | base06: '#e0e0e0', 11 | base07: '#ffffff', 12 | base08: '#eb008a', 13 | base09: '#f29333', 14 | base0A: '#f8ca12', 15 | base0B: '#37b349', 16 | base0C: '#00aabb', 17 | base0D: '#0e5a94', 18 | base0E: '#b31e8d', 19 | base0F: '#7a2d00', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/railscasts.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'railscasts', 3 | author: 'ryan bates (http://railscasts.com)', 4 | base00: '#2b2b2b', 5 | base01: '#272935', 6 | base02: '#3a4055', 7 | base03: '#5a647e', 8 | base04: '#d4cfc9', 9 | base05: '#e6e1dc', 10 | base06: '#f4f1ed', 11 | base07: '#f9f7f3', 12 | base08: '#da4939', 13 | base09: '#cc7833', 14 | base0A: '#ffc66d', 15 | base0B: '#a5c261', 16 | base0C: '#519f50', 17 | base0D: '#6d9cbe', 18 | base0E: '#b6b3eb', 19 | base0F: '#bc9458', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/shapeshifter.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'shapeshifter', 3 | author: 'tyler benziger (http://tybenz.com)', 4 | base00: '#000000', 5 | base01: '#040404', 6 | base02: '#102015', 7 | base03: '#343434', 8 | base04: '#555555', 9 | base05: '#ababab', 10 | base06: '#e0e0e0', 11 | base07: '#f9f9f9', 12 | base08: '#e92f2f', 13 | base09: '#e09448', 14 | base0A: '#dddd13', 15 | base0B: '#0ed839', 16 | base0C: '#23edda', 17 | base0D: '#3b48e3', 18 | base0E: '#f996e2', 19 | base0F: '#69542d', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/solarized.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'solarized', 3 | author: 'ethan schoonover (http://ethanschoonover.com/solarized)', 4 | base00: '#002b36', 5 | base01: '#073642', 6 | base02: '#586e75', 7 | base03: '#657b83', 8 | base04: '#839496', 9 | base05: '#93a1a1', 10 | base06: '#eee8d5', 11 | base07: '#fdf6e3', 12 | base08: '#dc322f', 13 | base09: '#cb4b16', 14 | base0A: '#b58900', 15 | base0B: '#859900', 16 | base0C: '#2aa198', 17 | base0D: '#268bd2', 18 | base0E: '#6c71c4', 19 | base0F: '#d33682', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/summerfruit.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'summerfruit', 3 | author: 'christopher corley (http://cscorley.github.io/)', 4 | base00: '#151515', 5 | base01: '#202020', 6 | base02: '#303030', 7 | base03: '#505050', 8 | base04: '#B0B0B0', 9 | base05: '#D0D0D0', 10 | base06: '#E0E0E0', 11 | base07: '#FFFFFF', 12 | base08: '#FF0086', 13 | base09: '#FD8900', 14 | base0A: '#ABA800', 15 | base0B: '#00C918', 16 | base0C: '#1faaaa', 17 | base0D: '#3777E6', 18 | base0E: '#AD00A1', 19 | base0F: '#cc6633', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/threezerotwofour.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'threezerotwofour', 3 | author: 'jan t. sott (http://github.com/idleberg)', 4 | base00: '#090300', 5 | base01: '#3a3432', 6 | base02: '#4a4543', 7 | base03: '#5c5855', 8 | base04: '#807d7c', 9 | base05: '#a5a2a2', 10 | base06: '#d6d5d4', 11 | base07: '#f7f7f7', 12 | base08: '#db2d20', 13 | base09: '#e8bbd0', 14 | base0A: '#fded02', 15 | base0B: '#01a252', 16 | base0C: '#b5e4f4', 17 | base0D: '#01a0e4', 18 | base0E: '#a16a94', 19 | base0F: '#cdab53', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/tomorrow.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'tomorrow', 3 | author: 'chris kempson (http://chriskempson.com)', 4 | base00: '#1d1f21', 5 | base01: '#282a2e', 6 | base02: '#373b41', 7 | base03: '#969896', 8 | base04: '#b4b7b4', 9 | base05: '#c5c8c6', 10 | base06: '#e0e0e0', 11 | base07: '#ffffff', 12 | base08: '#cc6666', 13 | base09: '#de935f', 14 | base0A: '#f0c674', 15 | base0B: '#b5bd68', 16 | base0C: '#8abeb7', 17 | base0D: '#81a2be', 18 | base0E: '#b294bb', 19 | base0F: '#a3685a', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/tube.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'london tube', 3 | author: 'jan t. sott', 4 | base00: '#231f20', 5 | base01: '#1c3f95', 6 | base02: '#5a5758', 7 | base03: '#737171', 8 | base04: '#959ca1', 9 | base05: '#d9d8d8', 10 | base06: '#e7e7e8', 11 | base07: '#ffffff', 12 | base08: '#ee2e24', 13 | base09: '#f386a1', 14 | base0A: '#ffd204', 15 | base0B: '#00853e', 16 | base0C: '#85cebc', 17 | base0D: '#009ddc', 18 | base0E: '#98005d', 19 | base0F: '#b06110', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/src/themes/twilight.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'twilight', 3 | author: 'david hart (http://hart-dev.com)', 4 | base00: '#1e1e1e', 5 | base01: '#323537', 6 | base02: '#464b50', 7 | base03: '#5f5a60', 8 | base04: '#838184', 9 | base05: '#a7a7a7', 10 | base06: '#c3c3c3', 11 | base07: '#ffffff', 12 | base08: '#cf6a4c', 13 | base09: '#cda869', 14 | base0A: '#f9ee98', 15 | base0B: '#8f9d6a', 16 | base0C: '#afc4db', 17 | base0D: '#7587a6', 18 | base0E: '#9b859d', 19 | base0F: '#9b703f', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-base16-styling/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-base16-styling/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-dock/demo/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # react-dock-demo 2 | 3 | ## 0.1.7 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies [6830118] 8 | - react-dock@0.8.0 9 | 10 | ## 0.1.6 11 | 12 | ### Patch Changes 13 | 14 | - Updated dependencies [bbb1a40] 15 | - react-dock@0.7.0 16 | 17 | ## 0.1.5 18 | 19 | ### Patch Changes 20 | 21 | - Updated dependencies [8a7eae4] 22 | - react-dock@0.6.0 23 | -------------------------------------------------------------------------------- /packages/react-dock/demo/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/react-dock/demo/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import App from './App'; 4 | 5 | const root = ReactDOM.createRoot(document.getElementById('root')!); 6 | root.render(); 7 | -------------------------------------------------------------------------------- /packages/react-dock/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.react.base.json", 3 | "include": ["src"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/react-dock/demo/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-dock/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['demo', 'lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/react-dock/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Dock } from './Dock.js'; 2 | -------------------------------------------------------------------------------- /packages/react-dock/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-dock/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-json-tree/eslint.config.js: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['examples', 'lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # react-json-tree-example 2 | 3 | ## 1.1.10 4 | 5 | ### Patch Changes 6 | 7 | - Updated dependencies [6830118] 8 | - react-json-tree@0.20.0 9 | 10 | ## 1.1.9 11 | 12 | ### Patch Changes 13 | 14 | - Updated dependencies [bbb1a40] 15 | - react-base16-styling@0.10.0 16 | - react-json-tree@0.19.0 17 | 18 | ## 1.1.8 19 | 20 | ### Patch Changes 21 | 22 | - Updated dependencies [81926f32] 23 | - react-json-tree@0.18.0 24 | 25 | ## 1.1.7 26 | 27 | ### Patch Changes 28 | 29 | - Updated dependencies [8a7eae4] 30 | - react-json-tree@0.17.0 31 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sample App 4 | 16 | 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/src/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'react-dom/client'; 2 | import React from 'react'; 3 | import App from './App'; 4 | 5 | const root = createRoot(document.getElementById('root')!); 6 | root.render(); 7 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.react.base.json", 3 | "include": ["src"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/react-json-tree/examples/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-json-tree/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extensionsToTreatAsEsm: ['.ts', '.tsx'], 3 | moduleNameMapper: { 4 | '^(\\.{1,2}/.*)\\.js$': '$1', 5 | }, 6 | transform: { 7 | '^.+\\.tsx?$': [ 8 | 'ts-jest', 9 | { tsconfig: 'tsconfig.test.json', useESM: true }, 10 | ], 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /packages/react-json-tree/src/objType.ts: -------------------------------------------------------------------------------- 1 | export default function objType(obj: any) { 2 | const type = Object.prototype.toString.call(obj).slice(8, -1); 3 | if (type === 'Object' && typeof obj[Symbol.iterator] === 'function') { 4 | return 'Iterable'; 5 | } 6 | 7 | if ( 8 | type === 'Custom' && 9 | obj.constructor !== Object && 10 | obj instanceof Object 11 | ) { 12 | // For projects implementing objects overriding `.prototype[Symbol.toStringTag]` 13 | return 'Object'; 14 | } 15 | 16 | return type; 17 | } 18 | -------------------------------------------------------------------------------- /packages/react-json-tree/src/themes/solarized.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'solarized', 3 | author: 'ethan schoonover (http://ethanschoonover.com/solarized)', 4 | base00: '#002b36', 5 | base01: '#073642', 6 | base02: '#586e75', 7 | base03: '#657b83', 8 | base04: '#839496', 9 | base05: '#93a1a1', 10 | base06: '#eee8d5', 11 | base07: '#fdf6e3', 12 | base08: '#dc322f', 13 | base09: '#cb4b16', 14 | base0A: '#b58900', 15 | base0B: '#859900', 16 | base0C: '#2aa198', 17 | base0D: '#268bd2', 18 | base0E: '#6c71c4', 19 | base0F: '#d33682', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/react-json-tree/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-json-tree/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.esm.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | setupFilesAfterEnv: ['/test/setup.ts'], 4 | testEnvironment: 'jsdom', 5 | moduleNameMapper: { 6 | '\\.css$': '/test/__mocks__/styleMock.ts', 7 | }, 8 | transform: { 9 | '^.+\\.jsx?$': 'babel-jest', 10 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 11 | }, 12 | transformIgnorePatterns: [ 13 | 'node_modules/(?!.pnpm|@babel/code-frame|@babel/highlight|@babel/helper-validator-identifier|chalk|color|d3|dateformat|delaunator|internmap|jsondiffpatch|lodash-es|nanoid|robust-predicates|uuid)', 14 | ], 15 | }; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/src/constants/dataTypes.ts: -------------------------------------------------------------------------------- 1 | export const DATA_TYPE_KEY = Symbol.for('__serializedType__'); 2 | export const DATA_REF_KEY = Symbol.for('__serializedRef__'); 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/src/middlewares/index.ts: -------------------------------------------------------------------------------- 1 | import { exportStateMiddleware } from './exportState'; 2 | 3 | const middlewares = [exportStateMiddleware]; 4 | 5 | export default middlewares; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/src/reducers/section.ts: -------------------------------------------------------------------------------- 1 | import { CHANGE_SECTION } from '../constants/actionTypes'; 2 | import { CoreStoreAction } from '../actions'; 3 | 4 | export type SectionState = string; 5 | 6 | export function section(state = 'Actions', action: CoreStoreAction) { 7 | if (action.type === CHANGE_SECTION) { 8 | return action.section; 9 | } 10 | return state; 11 | } 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/test/__mocks__/styleMock.ts: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/test/setup.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": ["node"] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app-core/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/demo/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import { Root } from '../src'; 4 | 5 | const root = createRoot(document.getElementById('root')!); 6 | root.render(); 7 | 8 | if (module.hot) { 9 | // https://github.com/webpack/webpack/issues/418#issuecomment-53398056 10 | module.hot.accept((err) => { 11 | if (err) console.error(err.message); // eslint-disable-line no-console 12 | }); 13 | 14 | /* 15 | module.hot.accept('./app', () => { 16 | const NextApp = require('./app').default; 17 | render( 18 | , 19 | document.getElementById('root') 20 | ); 21 | }); 22 | */ 23 | } 24 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/src/reducers/index.ts: -------------------------------------------------------------------------------- 1 | import { CoreStoreState, coreReducers } from '@redux-devtools/app-core'; 2 | import { combineReducers } from 'redux'; 3 | import { connection, ConnectionState } from './connection'; 4 | import { socket, SocketState } from './socket'; 5 | 6 | export interface StoreState extends CoreStoreState { 7 | readonly connection: ConnectionState; 8 | readonly socket: SocketState; 9 | } 10 | 11 | export const rootReducer = combineReducers({ 12 | ...coreReducers, 13 | connection, 14 | socket, 15 | }); 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/tsconfig.demo.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["webpack-env"] 5 | }, 6 | "include": ["demo", "src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": [] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-app/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/src/actions.ts: -------------------------------------------------------------------------------- 1 | export const TOGGLE_VISIBILITY = 2 | '@@redux-devtools-log-monitor/TOGGLE_VISIBILITY'; 3 | interface ToggleVisibilityAction { 4 | type: typeof TOGGLE_VISIBILITY; 5 | } 6 | export type ChartMonitorAction = ToggleVisibilityAction; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ChartMonitor } from './ChartMonitor'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-chart-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "@redux-devtools/cli", 4 | "version": "0.0.1", 5 | "main": "electron.cjs", 6 | "description": "Remote Redux DevTools", 7 | "authors": "Mihail Diordiev" 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/bin/redux-devtools.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | import '../dist/bin/redux-devtools.js'; 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/defaultDbOptions.json: -------------------------------------------------------------------------------- 1 | { 2 | "client": "sqlite3", 3 | "connection": { "filename": ":memory:" }, 4 | "useNullAsDefault": true, 5 | "debug": false, 6 | "migrate": true 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import globals from 'globals'; 2 | import eslintJs from '../../eslint.js.config.base.mjs'; 3 | import eslintTs from '../../eslint.ts.config.base.mjs'; 4 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 5 | 6 | export default [ 7 | ...eslintJs, 8 | ...eslintTs(import.meta.dirname), 9 | ...eslintTsJest(import.meta.dirname), 10 | { 11 | ignores: ['dist', 'umd'], 12 | }, 13 | { 14 | languageOptions: { 15 | globals: { 16 | ...globals.nodeBuiltin, 17 | }, 18 | }, 19 | }, 20 | ]; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/jest.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | preset: 'ts-jest', 3 | transform: { 4 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/src/api/schema.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import type { Store } from '../store.js'; 3 | 4 | export const schema = fs.readFileSync( 5 | new URL('./schema_def.graphql', import.meta.url), 6 | 'utf8', 7 | ); 8 | 9 | export const resolvers = { 10 | Query: { 11 | reports: function report( 12 | source: unknown, 13 | args: unknown, 14 | context: { store: Store }, 15 | ) { 16 | return context.store.listAll(); 17 | }, 18 | report: function report( 19 | source: unknown, 20 | args: { id: string }, 21 | context: { store: Store }, 22 | ) { 23 | return context.store.get(args.id); 24 | }, 25 | }, 26 | }; 27 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/src/db/seeds/index.ts: -------------------------------------------------------------------------------- 1 | import { Knex } from 'knex'; 2 | 3 | export function seed(knex: Knex) { 4 | return Promise.all([knex('remotedev_apps').del()]).then(function () { 5 | return Promise.all([ 6 | knex('remotedev_apps').insert({ 7 | id: '78626c31-e16b-4528-b8e5-f81301b627f4', 8 | title: 'Default', 9 | }), 10 | ]); 11 | }); 12 | } 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "outDir": "dist" 7 | }, 8 | "include": ["src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-cli/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const POSITIONS = ['left', 'top', 'right', 'bottom'] as const; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as DockMonitor } from './DockMonitor'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-dock-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-extension/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-extension/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-extension/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | { 8 | ignores: ['lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-extension/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/demo/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%= htmlWebpackPlugin.options.package.name %> 6 | 10 | 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/demo/src/getOptions.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | useExtension: boolean; 3 | supportImmutable: boolean; 4 | theme: string; 5 | dark: boolean; 6 | } 7 | 8 | export default function getOptions(location: { search: string }) { 9 | return { 10 | useExtension: location.search.includes('ext'), 11 | supportImmutable: location.search.includes('immutable'), 12 | theme: getTheme(location), 13 | dark: location.search.includes('dark'), 14 | }; 15 | } 16 | 17 | function getTheme(location: { search: string }) { 18 | const match = /theme=([^&]+)/.exec(location.search); 19 | return match ? match[1] : 'inspector'; 20 | } 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "types": ["webpack-env"] 6 | }, 7 | "include": ["../src", "src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/demo/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "types": ["node", "webpack-dev-server"] 6 | }, 7 | "include": ["webpack.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['demo', 'lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | moduleNameMapper: { 5 | '\\.css$': '/test/__mocks__/styleMock.ts', 6 | }, 7 | transform: { 8 | '^.+\\.jsx?$': 'babel-jest', 9 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 10 | }, 11 | transformIgnorePatterns: ['node_modules/(?!.pnpm|color|lodash-es|nanoid)'], 12 | }; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/index.ts: -------------------------------------------------------------------------------- 1 | import { AssertionLocals, DispatcherLocals, WrapLocals } from '../../types'; 2 | 3 | export const name = 'Ava template'; 4 | 5 | export const dispatcher = ({ action, prevState }: DispatcherLocals) => 6 | `state = reducers(${prevState!}, ${action!});`; 7 | 8 | export const assertion = ({ curState }: AssertionLocals) => 9 | `t.deepEqual(state, ${curState!});`; 10 | 11 | export const wrap = ({ assertions }: WrapLocals) => 12 | `import test from 'ava'; 13 | import reducers from '../../reducers'; 14 | 15 | test('reducers', (t) => { 16 | let state; 17 | ${assertions} 18 | }); 19 | `; 20 | 21 | export default { name, assertion, dispatcher, wrap }; 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Ava template'; 2 | 3 | export const dispatcher = 'state = reducers(${prevState}, ${action});'; 4 | 5 | export const assertion = 't.deepEqual(state, ${curState});'; 6 | 7 | export const wrap = `import test from 'ava'; 8 | import reducers from '../../reducers'; 9 | 10 | test('reducers', (t) => { 11 | let state; 12 | \${assertions} 13 | }); 14 | `; 15 | 16 | export default { name, assertion, dispatcher, wrap }; 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/index.ts: -------------------------------------------------------------------------------- 1 | import { AssertionLocals, DispatcherLocals, WrapLocals } from '../../types'; 2 | 3 | export const name = 'Jest template'; 4 | 5 | export const dispatcher = ({ action, prevState }: DispatcherLocals) => 6 | `state = reducers(${prevState!}, ${action!});`; 7 | 8 | export const assertion = ({ curState }: AssertionLocals) => 9 | `expect(state).toEqual(${curState!});`; 10 | 11 | export const wrap = ({ assertions }: WrapLocals) => 12 | `import reducers from '../../reducers'; 13 | 14 | test('reducers', () => { 15 | let state; 16 | ${assertions} 17 | }); 18 | `; 19 | 20 | export default { name, assertion, dispatcher, wrap }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Jest template'; 2 | 3 | export const dispatcher = 'state = reducers(${prevState}, ${action});'; 4 | 5 | export const assertion = 'expect(state).toEqual(${curState});'; 6 | 7 | export const wrap = `import reducers from '../../reducers'; 8 | 9 | test('reducers', () => { 10 | let state; 11 | \${assertions} 12 | }); 13 | `; 14 | 15 | export default { name, assertion, dispatcher, wrap }; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/mocha/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Mocha template'; 2 | 3 | export const dispatcher = 'state = reducers(${prevState}, ${action});'; 4 | 5 | export const assertion = 'expect(state).toEqual(${curState});'; 6 | 7 | export const wrap = `import expect from 'expect'; 8 | import reducers from '../../reducers'; 9 | 10 | describe('reducers', () => { 11 | it('should handle actions', () => { 12 | let state; 13 | \${assertions} 14 | }); 15 | }); 16 | `; 17 | 18 | export default { name, assertion, dispatcher, wrap }; 19 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/redux/tape/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Tape template'; 2 | 3 | export const dispatcher = 'state = reducers(${prevState}, ${action});'; 4 | 5 | export const assertion = 't.deepEqual(state, ${curState});'; 6 | 7 | export const wrap = `import test from 'tape'; 8 | import reducers from '../../reducers'; 9 | 10 | test('reducers', (t) => { 11 | let state; 12 | \${assertions} 13 | t.end(); 14 | }); 15 | `; 16 | 17 | export default { name, assertion, dispatcher, wrap }; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/types.ts: -------------------------------------------------------------------------------- 1 | export interface DispatcherLocals { 2 | action: string | undefined; 3 | prevState: string | undefined; 4 | } 5 | 6 | export interface AssertionLocals { 7 | path: string; 8 | curState: number | string | undefined; 9 | } 10 | 11 | export interface WrapLocals { 12 | name: string | undefined; 13 | assertions: string; 14 | actionName?: string; 15 | initialState?: string | undefined; 16 | } 17 | 18 | export interface Template { 19 | name?: string; 20 | dispatcher: string; 21 | assertion: string; 22 | wrap: string; 23 | } 24 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/ava/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Ava template'; 2 | 3 | export const dispatcher = '${action};'; 4 | 5 | export const assertion = 't.deepEqual(state${path}, ${curState});'; 6 | 7 | export const wrap = `import test from 'ava'; 8 | import \${name} from '../../stores/\${name}'; 9 | 10 | test('\${name}', (t) => { 11 | const store = new \${name}(\${initialState}); 12 | \${assertions} 13 | }); 14 | `; 15 | 16 | export default { name, assertion, dispatcher, wrap }; 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/jest/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Mocha template'; 2 | 3 | export const dispatcher = '${action};'; 4 | 5 | export const assertion = 'expect(store${path}).toEqual(${curState});'; 6 | 7 | export const wrap = `import expect from 'expect'; 8 | import \${name} from '../../stores/\${name}'; 9 | 10 | test('\${name}', (t) => { 11 | const store = new \${name}(\${initialState}); 12 | \${assertions} 13 | }); 14 | `; 15 | 16 | export default { name, assertion, dispatcher, wrap }; 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/mocha/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Mocha template'; 2 | 3 | export const dispatcher = '${action};'; 4 | 5 | export const assertion = 'expect(store${path}).toEqual(${curState});'; 6 | 7 | export const wrap = `import expect from 'expect'; 8 | import \${name} from '../../stores/\${name}'; 9 | 10 | describe('\${name}', () => { 11 | it('\${actionName}', () => { 12 | const store = new \${name}(\${initialState}); 13 | \${assertions} 14 | }); 15 | }); 16 | `; 17 | 18 | export default { name, assertion, dispatcher, wrap }; 19 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/tape/template.ts: -------------------------------------------------------------------------------- 1 | export const name = 'Tape template'; 2 | 3 | export const dispatcher = '${action};'; 4 | 5 | export const assertion = 't.deepEqual(state${path}, ${curState});'; 6 | 7 | export const wrap = `import test from 'tape'; 8 | import \${name} from '../../stores/\${name}'; 9 | 10 | test('\${name}', (t) => { 11 | const store = new \${name}(\${initialState}); 12 | \${assertions} 13 | t.end(); 14 | }); 15 | `; 16 | 17 | export default { name, assertion, dispatcher, wrap }; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/test/__mocks__/styleMock.ts: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "resolveJsonModule": true 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-test-tab/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | transform: { 5 | '^.+\\.jsx?$': 'babel-jest', 6 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 7 | }, 8 | transformIgnorePatterns: [ 9 | 'node_modules/(?!.pnpm|@babel/code-frame|@babel/highlight|@babel/helper-validator-identifier|chalk|color|lodash-es)', 10 | ], 11 | }; 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/src/presets.ts: -------------------------------------------------------------------------------- 1 | export const toExclude = /chrome-extension:\/\/|moz-extension:\/\//; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": ["chrome", "node"] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor-trace-tab/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest", "node", "chrome"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript", 6 | "@emotion/babel-preset-css-prop" 7 | ], 8 | "plugins": ["@babel/plugin-transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript", 6 | "@emotion/babel-preset-css-prop" 7 | ], 8 | "plugins": ["@babel/plugin-transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-inspector-monitor/demo.gif -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/demo/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/demo/src/getOptions.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | useExtension: boolean; 3 | supportImmutable: boolean; 4 | theme: string; 5 | dark: boolean; 6 | } 7 | 8 | export default function getOptions(location: { search: string }) { 9 | return { 10 | useExtension: location.search.includes('ext'), 11 | supportImmutable: location.search.includes('immutable'), 12 | theme: getTheme(location), 13 | dark: location.search.includes('dark'), 14 | }; 15 | } 16 | 17 | function getTheme(location: { search: string }) { 18 | const match = /theme=([^&]+)/.exec(location.search); 19 | return match ? match[1] : 'inspector'; 20 | } 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "types": ["webpack-env"] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/demo/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "types": ["node", "webpack-dev-server"] 6 | }, 7 | "include": ["webpack.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['demo', 'lib'], 9 | }, 10 | { 11 | files: ['**/*.ts', '**/*.tsx'], 12 | rules: { 13 | 'react/no-unknown-property': ['error', { ignore: ['css'] }], 14 | }, 15 | }, 16 | ]; 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { LabelRenderer } from 'react-json-tree'; 2 | export { default as InspectorMonitor } from './DevtoolsInspector'; 3 | export type { Tab, TabComponentProps } from './ActionPreview'; 4 | export type { DevtoolsInspectorState } from './redux'; 5 | export type { Base16ThemeName } from './utils/themes'; 6 | export * as inspectorThemes from './themes/index'; 7 | export { default as ActionTab } from './tabs/ActionTab'; 8 | export { default as DiffTab } from './tabs/DiffTab'; 9 | export { default as StateTab } from './tabs/StateTab'; 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/tabs/DiffTab.tsx: -------------------------------------------------------------------------------- 1 | import React, { FunctionComponent } from 'react'; 2 | import JSONDiff from './JSONDiff'; 3 | import { TabComponentProps } from '../ActionPreview'; 4 | import { Action } from 'redux'; 5 | 6 | const DiffTab: FunctionComponent< 7 | TabComponentProps> 8 | > = ({ 9 | delta, 10 | base16Theme, 11 | invertTheme, 12 | labelRenderer, 13 | isWideLayout, 14 | dataTypeKey, 15 | }) => ( 16 | 26 | ); 27 | 28 | export default DiffTab; 29 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/tabs/getJsonTreeTheme.ts: -------------------------------------------------------------------------------- 1 | import type { Base16Theme, StylingConfig } from 'react-base16-styling'; 2 | 3 | export default function getJsonTreeTheme( 4 | base16Theme: Base16Theme, 5 | ): StylingConfig { 6 | return { 7 | extend: base16Theme, 8 | nestedNode: ({ style }, keyPath, nodeType, expanded) => ({ 9 | style: { 10 | ...style, 11 | whiteSpace: expanded ? 'inherit' : 'nowrap', 12 | }, 13 | }), 14 | nestedNodeItemString: ({ style }, keyPath, nodeType, expanded) => ({ 15 | style: { 16 | ...style, 17 | display: expanded ? 'none' : 'inline', 18 | }, 19 | }), 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/themes/index.ts: -------------------------------------------------------------------------------- 1 | export { default as inspector } from './inspector'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/themes/inspector.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'inspector', 3 | author: 'Alexander Kuznetsov (alexkuz@gmail.com)', 4 | base00: '#181818', 5 | base01: '#282828', 6 | base02: '#383838', 7 | base03: '#585858', 8 | base04: '#b8b8b8', 9 | base05: '#d8d8d8', 10 | base06: '#e8e8e8', 11 | base07: '#FFFFFF', 12 | base08: '#E92F28', 13 | base09: '#dc9656', 14 | base0A: '#f7ca88', 15 | base0B: '#65AD00', 16 | base0C: '#86c1b9', 17 | base0D: '#347BD9', 18 | base0E: '#EC31C0', 19 | base0F: '#a16946', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/src/utils/isIterable.ts: -------------------------------------------------------------------------------- 1 | export default function isIterable(obj: any) { 2 | return ( 3 | obj !== null && 4 | typeof obj === 'object' && 5 | !Array.isArray(obj) && 6 | typeof obj[window.Symbol.iterator] === 'function' 7 | ); 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-inspector-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "resolveJsonModule": true, 6 | "jsx": "react-jsx", 7 | "jsxImportSource": "@emotion/react", 8 | "stripInternal": true 9 | }, 10 | "include": ["src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-typescript" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-typescript" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTs(import.meta.dirname), 8 | ...eslintTsJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | transform: { 4 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/src/getSymbolObservable.ts: -------------------------------------------------------------------------------- 1 | export default function getSymbolObservable() { 2 | return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; 3 | } 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": ["node"] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-instrument/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["jest", "node"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/src/brighten.ts: -------------------------------------------------------------------------------- 1 | export default function (hexColor: string, lightness: number) { 2 | let hex = String(hexColor).replace(/[^0-9a-f]/gi, ''); 3 | if (hex.length < 6) { 4 | hex = hex.replace(/(.)/g, '$1$1'); 5 | } 6 | const lum = lightness || 0; 7 | 8 | let rgb = '#'; 9 | let c; 10 | for (let i = 0; i < 3; ++i) { 11 | c = parseInt(hex.substr(i * 2, 2), 16); 12 | c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16); 13 | rgb += ('00' + c).substr(c.length); 14 | } 15 | return rgb; 16 | } 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LogMonitor } from './LogMonitor'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-log-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "targets": "defaults", 7 | "include": ["@babel/plugin-transform-async-generator-functions"], 8 | "modules": false 9 | } 10 | ], 11 | "@babel/preset-typescript" 12 | ], 13 | "plugins": ["@babel/plugin-transform-runtime"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "targets": "defaults", 7 | "include": ["@babel/plugin-transform-async-generator-functions"] 8 | } 9 | ], 10 | "@babel/preset-typescript" 11 | ], 12 | "plugins": ["@babel/plugin-transform-runtime"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-remote/demo.gif -------------------------------------------------------------------------------- /packages/redux-devtools-remote/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | { 8 | ignores: ['examples', 'lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/containers/App.js: -------------------------------------------------------------------------------- 1 | import { bindActionCreators } from 'redux'; 2 | import { connect } from 'react-redux'; 3 | import Counter from '../components/Counter'; 4 | import * as CounterActions from '../actions/counter'; 5 | 6 | function mapStateToProps(state) { 7 | return { 8 | counter: state.counter, 9 | }; 10 | } 11 | 12 | function mapDispatchToProps(dispatch) { 13 | return bindActionCreators(CounterActions, dispatch); 14 | } 15 | 16 | export default connect(mapStateToProps, mapDispatchToProps)(Counter); 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux counter example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import App from './containers/App'; 5 | import configureStore from './store/configureStore'; 6 | 7 | const store = configureStore(); 8 | 9 | render( 10 | 11 | 12 | , 13 | document.getElementById('root'), 14 | ); 15 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/reducers/counter.js: -------------------------------------------------------------------------------- 1 | import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../actions/counter'; 2 | 3 | export default function counter(state = 0, action) { 4 | switch (action.type) { 5 | case INCREMENT_COUNTER: 6 | return state + 1; 7 | case DECREMENT_COUNTER: 8 | return state - 1; 9 | default: 10 | return state; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import counter from './counter'; 3 | 4 | const rootReducer = combineReducers({ 5 | counter, 6 | }); 7 | 8 | export default rootReducer; 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/counter/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/node-counter/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "redux-remote-devtools-node-counter", 3 | "version": "1.0.0", 4 | "description": "Very simple counter for redux remote devtools in node", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "license": "MIT", 10 | "dependencies": { 11 | "redux": "^3.5.2" 12 | }, 13 | "devDependencies": { 14 | "remote-redux-devtools": "^0.5.7" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"], 3 | "plugins": ["transform-decorators-legacy"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/actions/todos.js: -------------------------------------------------------------------------------- 1 | import * as types from '../constants/ActionTypes'; 2 | 3 | export function addTodo(text) { 4 | return { type: types.ADD_TODO, text }; 5 | } 6 | 7 | export function deleteTodo(id) { 8 | return { type: types.DELETE_TODO, id }; 9 | } 10 | 11 | export function editTodo(id, text) { 12 | return { type: types.EDIT_TODO, id, text }; 13 | } 14 | 15 | export function completeTodo(id) { 16 | return { type: types.COMPLETE_TODO, id }; 17 | } 18 | 19 | export function completeAll() { 20 | return { type: types.COMPLETE_ALL }; 21 | } 22 | 23 | export function clearCompleted() { 24 | return { type: types.CLEAR_COMPLETED }; 25 | } 26 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/constants/ActionTypes.js: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const COMPLETE_TODO = 'COMPLETE_TODO'; 5 | export const COMPLETE_ALL = 'COMPLETE_ALL'; 6 | export const CLEAR_COMPLETED = 'CLEAR_COMPLETED'; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/constants/TodoFilters.js: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_COMPLETED = 'show_completed'; 3 | export const SHOW_ACTIVE = 'show_active'; 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/containers/Root.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import { Route, Redirect } from 'react-router'; 4 | import { ReduxRouter } from 'redux-router'; 5 | import Wrapper from './Wrapper'; 6 | import App from './App'; 7 | 8 | class Root extends Component { 9 | render() { 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | 17 | ); 18 | } 19 | } 20 | 21 | export default Root; 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux TodoMVC example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill'; 2 | import React from 'react'; 3 | import { render } from 'react-dom'; 4 | import { Provider } from 'react-redux'; 5 | import Root from './containers/Root'; 6 | import configureStore from './store/configureStore'; 7 | import 'todomvc-app-css/index.css'; 8 | 9 | const store = configureStore(); 10 | 11 | render( 12 | 13 | 14 | , 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { routerStateReducer } from 'redux-router'; 3 | import todos from './todos'; 4 | 5 | const rootReducer = combineReducers({ 6 | todos, 7 | router: routerStateReducer, 8 | }); 9 | 10 | export default rootReducer; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/router/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/actions/todos.js: -------------------------------------------------------------------------------- 1 | import * as types from '../constants/ActionTypes'; 2 | 3 | export function addTodo(text) { 4 | return { type: types.ADD_TODO, text }; 5 | } 6 | 7 | export function deleteTodo(id) { 8 | return { type: types.DELETE_TODO, id }; 9 | } 10 | 11 | export function editTodo(id, text) { 12 | return { type: types.EDIT_TODO, id, text }; 13 | } 14 | 15 | export function completeTodo(id) { 16 | return { type: types.COMPLETE_TODO, id }; 17 | } 18 | 19 | export function completeAll() { 20 | return { type: types.COMPLETE_ALL }; 21 | } 22 | 23 | export function clearCompleted() { 24 | return { type: types.CLEAR_COMPLETED }; 25 | } 26 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/constants/ActionTypes.js: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const COMPLETE_TODO = 'COMPLETE_TODO'; 5 | export const COMPLETE_ALL = 'COMPLETE_ALL'; 6 | export const CLEAR_COMPLETED = 'CLEAR_COMPLETED'; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/constants/TodoFilters.js: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_COMPLETED = 'show_completed'; 3 | export const SHOW_ACTIVE = 'show_active'; 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redux TodoMVC example 5 | 6 | 7 |
8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill'; 2 | import React from 'react'; 3 | import { render } from 'react-dom'; 4 | import { Provider } from 'react-redux'; 5 | import App from './containers/App'; 6 | import configureStore from './store/configureStore'; 7 | import 'todomvc-app-css/index.css'; 8 | 9 | const store = configureStore(); 10 | 11 | render( 12 | 13 | 14 | , 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import todos from './todos'; 3 | 4 | const rootReducer = combineReducers({ 5 | todos, 6 | }); 7 | 8 | export default rootReducer; 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/todomvc/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/actions/monitoring.js: -------------------------------------------------------------------------------- 1 | export const START_MONITORING = 'START_MONITORING'; 2 | export const STOP_MONITORING = 'STOP_MONITORING'; 3 | export const SEND_TO_MONITOR = 'SEND_TO_MONITOR'; 4 | 5 | export function startMonitoring() { 6 | return { 7 | type: START_MONITORING, 8 | }; 9 | } 10 | 11 | export function stopMonitoring() { 12 | return { 13 | type: STOP_MONITORING, 14 | }; 15 | } 16 | 17 | export function sendToMonitor() { 18 | return { 19 | type: SEND_TO_MONITOR, 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/containers/App.js: -------------------------------------------------------------------------------- 1 | import { bindActionCreators } from 'redux'; 2 | import { connect } from 'react-redux'; 3 | import Counter from '../components/Counter'; 4 | import * as CounterActions from '../actions/counter'; 5 | import * as MonitorActions from '../actions/monitoring'; 6 | 7 | function mapStateToProps(state) { 8 | return { 9 | counter: state.counter, 10 | }; 11 | } 12 | 13 | function mapDispatchToProps(dispatch) { 14 | return bindActionCreators({ ...CounterActions, ...MonitorActions }, dispatch); 15 | } 16 | 17 | export default connect(mapStateToProps, mapDispatchToProps)(Counter); 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import App from './containers/App'; 5 | import configureStore from './store/configureStore'; 6 | 7 | const store = configureStore(); 8 | 9 | render( 10 |
11 | 12 | 13 | 14 |
, 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/reducers/counter.js: -------------------------------------------------------------------------------- 1 | import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../actions/counter'; 2 | 3 | export default function counter(state = 0, action) { 4 | switch (action.type) { 5 | case INCREMENT_COUNTER: 6 | return state + 1; 7 | case DECREMENT_COUNTER: 8 | return state - 1; 9 | default: 10 | return state; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import counter from './counter'; 3 | 4 | const rootReducer = combineReducers({ 5 | counter, 6 | }); 7 | 8 | export default rootReducer; 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/examples/toggle-monitoring/test/setup.js: -------------------------------------------------------------------------------- 1 | import { jsdom } from 'jsdom'; 2 | 3 | global.document = jsdom(''); 4 | global.window = document.defaultView; 5 | global.navigator = global.window.navigator; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/src/configureStore.ts: -------------------------------------------------------------------------------- 1 | import { instrument, Options } from '@redux-devtools/instrument'; 2 | import { Action, Reducer, StoreEnhancerStoreCreator } from 'redux'; 3 | 4 | export default function configureStore< 5 | S, 6 | A extends Action, 7 | MonitorState, 8 | MonitorAction extends Action, 9 | >( 10 | next: StoreEnhancerStoreCreator, 11 | subscriber: Reducer, 12 | options: Options, 13 | ) { 14 | return instrument(subscriber, options)(next); 15 | } 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const defaultSocketOptions = { 2 | secure: false, 3 | hostname: 'localhost', 4 | port: 8000, 5 | autoReconnect: true, 6 | autoReconnectOptions: { 7 | randomness: 30000, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as devToolsEnhancer, composeWithDevTools } from './devTools'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-remote/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript", 6 | "@emotion/babel-preset-css-prop" 7 | ], 8 | "plugins": ["@babel/plugin-transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript", 6 | "@emotion/babel-preset-css-prop" 7 | ], 8 | "plugins": ["@babel/plugin-transform-runtime"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/components/ui/provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import React from 'react'; 4 | import { ChakraProvider, defaultSystem } from '@chakra-ui/react'; 5 | 6 | export function Provider({ children }: { children: React.ReactNode }) { 7 | return {children}; 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/features/DevTools/DevTools.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { createDevTools } from '@redux-devtools/core'; 3 | import { DockMonitor } from '@redux-devtools/dock-monitor'; 4 | import { RtkQueryMonitor } from '@redux-devtools/rtk-query-monitor'; 5 | 6 | const largeScreenQuery = window.matchMedia('(min-width: 1024px)'); 7 | 8 | export default createDevTools( 9 | 16 | 17 | , 18 | ); 19 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/features/DevTools/config.ts: -------------------------------------------------------------------------------- 1 | export const isExtensionEnabledKey = 'prefer-extension'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/features/DevTools/helpers.ts: -------------------------------------------------------------------------------- 1 | import { isExtensionEnabledKey } from './config'; 2 | 3 | export function isExtensionEnabled(): boolean { 4 | let extensionEnabled = false; 5 | 6 | try { 7 | extensionEnabled = 8 | window.sessionStorage.getItem(isExtensionEnabledKey) === '1'; 9 | } catch (err) { 10 | console.error(err); 11 | } 12 | 13 | return extensionEnabled; 14 | } 15 | 16 | export function setIsExtensionEnabled(active: boolean): void { 17 | try { 18 | window.sessionStorage.setItem(isExtensionEnabledKey, active ? '1' : '0'); 19 | } catch (err) { 20 | console.error(err); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/features/posts/PostsView.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Route, Routes } from 'react-router-dom'; 3 | import { PostsManager } from '../../features/posts/PostsManager'; 4 | import { Box, Heading } from '@chakra-ui/react'; 5 | 6 | function PostsView() { 7 | return ( 8 | 9 | Posts Demo 10 | 11 | } /> 12 | 13 | 14 | ); 15 | } 16 | 17 | export default PostsView; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/mocks/browser.ts: -------------------------------------------------------------------------------- 1 | import { setupWorker } from 'msw/browser'; 2 | import { handlers } from './db'; 3 | 4 | export const worker = setupWorker(...handlers); 5 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@redux-devtools/app'; 2 | 3 | declare module 'remote-redux-devtools'; 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/demo/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "types": ["node", "webpack-dev-server"] 6 | }, 7 | "include": ["webpack.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['demo', 'lib'], 11 | }, 12 | { 13 | files: ['**/*.ts', '**/*.tsx'], 14 | rules: { 15 | 'react/no-unknown-property': ['error', { ignore: ['css'] }], 16 | }, 17 | }, 18 | ]; 19 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | moduleNameMapper: { 5 | '\\.css$': '/test/__mocks__/styleMock.ts', 6 | }, 7 | transform: { 8 | '^.+\\.jsx?$': 'babel-jest', 9 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 10 | }, 11 | transformIgnorePatterns: ['node_modules/(?!.pnpm|color|lodash-es|nanoid)'], 12 | }; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/monitor-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-rtk-query-monitor/monitor-demo.gif -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RtkQueryMonitor } from './containers/RtkQueryMonitor'; 2 | export type { ExternalProps } from './types'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/monitor-config.ts: -------------------------------------------------------------------------------- 1 | export const DATA_TYPE_KEY = Symbol.for('__serializedType__'); 2 | 3 | /** 4 | * @see https://github.com/reduxjs/redux-toolkit/blob/b718e01d323d3ab4b913e5d88c9b90aa790bb975/src/query/core/buildSlice.ts#L259 5 | */ 6 | export const missingTagId = '__internal_without_id'; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/utils/a11y.ts: -------------------------------------------------------------------------------- 1 | import { QueryPreviewTabs } from '../types'; 2 | 3 | export function renderTabPanelId(value: QueryPreviewTabs): string { 4 | return `rtk-query-monitor-tab-panel-${value}`; 5 | } 6 | 7 | export function renderTabPanelButtonId(value: QueryPreviewTabs): string { 8 | return renderTabPanelId(value) + '-button'; 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/utils/isIterable.ts: -------------------------------------------------------------------------------- 1 | export default function isIterable(obj: unknown): boolean { 2 | return ( 3 | obj !== null && 4 | typeof obj === 'object' && 5 | !Array.isArray(obj) && 6 | typeof (obj as Record)[ 7 | window.Symbol.iterator 8 | ] === 'function' 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/utils/object.ts: -------------------------------------------------------------------------------- 1 | import { freeze } from '@reduxjs/toolkit'; 2 | 3 | export const emptyArray = freeze([]); 4 | 5 | export const emptyRecord = freeze({}); 6 | 7 | export function identity(val: T): T { 8 | return val; 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/utils/regexp.ts: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/a/9310752 2 | export function escapeRegExpSpecialCharacter(text: string): string { 3 | return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 4 | } 5 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/src/utils/tabs.ts: -------------------------------------------------------------------------------- 1 | import { TabOption } from '../types'; 2 | 3 | export function isTabVisible( 4 | tab: TabOption, 5 | visKey: Vis | 'default', 6 | ): boolean { 7 | if (typeof tab.visible === 'boolean') { 8 | return tab.visible; 9 | } 10 | 11 | if (typeof tab.visible === 'object' && tab.visible) { 12 | return !!tab.visible[visKey]; 13 | } 14 | 15 | return true; 16 | } 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/test/__mocks__/styleMock.ts: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/test/devtools.mocks.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { createDevTools } from '@redux-devtools/core'; 3 | import { RtkQueryMonitor } from '../src'; 4 | 5 | const MonitorAsAny = RtkQueryMonitor as any; 6 | 7 | export const ReduxDevTools = createDevTools(); 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "resolveJsonModule": true, 6 | "jsx": "react-jsx", 7 | "jsxImportSource": "@emotion/react", 8 | "stripInternal": true 9 | }, 10 | "include": ["src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-rtk-query-monitor/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"], 5 | "jsx": "react-jsx", 6 | "jsxImportSource": "@emotion/react" 7 | }, 8 | "include": ["src", "test"], 9 | "exclude": ["dist"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTs(import.meta.dirname), 8 | ...eslintTsJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | transform: { 4 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/src/constants/options.ts: -------------------------------------------------------------------------------- 1 | // jsan stringify options 2 | 3 | export default { 4 | refs: false, // references can't be resolved on the original Immutable structure 5 | date: true, 6 | function: true, 7 | regex: true, 8 | undefined: true, 9 | error: true, 10 | symbol: true, 11 | map: true, 12 | set: true, 13 | nan: true, 14 | infinity: true, 15 | }; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/src/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | default as immutable, 3 | serialize as immutableSerialize, 4 | } from './immutable'; 5 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/test/__snapshots__/helpers.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Helpers extract 1`] = ` 4 | { 5 | "__serializedType__": "testType", 6 | "data": { 7 | "testData": "test", 8 | }, 9 | } 10 | `; 11 | 12 | exports[`Helpers mark 1`] = ` 13 | { 14 | "__serializedType__": "testType", 15 | "data": { 16 | "testData": "test", 17 | }, 18 | } 19 | `; 20 | 21 | exports[`Helpers mark 2`] = ` 22 | { 23 | "__serializedType__": "testType", 24 | "data": "[object Object]", 25 | } 26 | `; 27 | 28 | exports[`Helpers refer 1`] = ` 29 | { 30 | "__serializedType__": "testType", 31 | "data": { 32 | "testData": "test", 33 | }, 34 | } 35 | `; 36 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-serialize/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTsReact(import.meta.dirname), 7 | { 8 | ignores: ['examples', 'lib'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/README.md: -------------------------------------------------------------------------------- 1 | # Redux DevTools TodoMVC example 2 | 3 | ## Getting Started 4 | 5 | 1. Install dependencies: `npm i` 6 | 2. Start the development server: `npm start` 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Redux TodoMVC 4 | 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/constants/ActionTypes.ts: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const MARK_TODO = 'MARK_TODO'; 5 | export const MARK_ALL = 'MARK_ALL'; 6 | export const CLEAR_MARKED = 'CLEAR_MARKED'; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/constants/TodoFilters.ts: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_MARKED = 'show_marked'; 3 | export const SHOW_UNMARKED = 'show_unmarked'; 4 | 5 | export type TodoFilter = 6 | | typeof SHOW_ALL 7 | | typeof SHOW_MARKED 8 | | typeof SHOW_UNMARKED; 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/containers/DevTools.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createDevTools } from '@redux-devtools/core'; 3 | import { DockMonitor } from '@redux-devtools/dock-monitor'; 4 | import { SliderMonitor } from '@redux-devtools/slider-monitor'; 5 | 6 | export default createDevTools( 7 | 13 | 14 | , 15 | ); 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/containers/Root.dev.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import { Store } from 'redux'; 4 | import TodoApp from './TodoApp'; 5 | import DevTools from './DevTools'; 6 | import { TodoState } from '../reducers'; 7 | import { TodoAction } from '../actions/TodoActions'; 8 | 9 | interface Props { 10 | store: Store; 11 | } 12 | 13 | const Root: React.FunctionComponent = ({ store }) => ( 14 | 15 |
16 | 17 | 18 |
19 |
20 | ); 21 | 22 | export default Root; 23 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/containers/Root.prod.tsx: -------------------------------------------------------------------------------- 1 | import React, { FunctionComponent } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import TodoApp from './TodoApp'; 4 | import { Store } from 'redux'; 5 | import { TodoState } from '../reducers'; 6 | import { TodoAction } from '../actions/TodoActions'; 7 | 8 | interface Props { 9 | store: Store; 10 | } 11 | 12 | const Root: FunctionComponent = ({ store }) => ( 13 | 14 |
15 | 16 |
17 |
18 | ); 19 | 20 | export default Root; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/containers/Root.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { ComponentType } from 'react'; 3 | import { TodoState } from '../reducers'; 4 | import { TodoAction } from '../actions/TodoActions'; 5 | 6 | interface Props { 7 | store: Store; 8 | } 9 | const Root: ComponentType = 10 | process.env.NODE_ENV === 'production' 11 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./Root.prod').default 13 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 14 | require('./Root.dev').default; 15 | export default Root; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/index.tsx: -------------------------------------------------------------------------------- 1 | import 'todomvc-app-css/index.css'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom/client'; 4 | import configureStore from './store/configureStore'; 5 | import Root from './containers/Root'; 6 | 7 | const store = configureStore(); 8 | 9 | const rootEl = document.getElementById('root'); 10 | const root = ReactDOM.createRoot(rootEl!); 11 | root.render(); 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/reducers/index.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers, Reducer } from 'redux'; 2 | import todos, { Todo } from './todos'; 3 | import { TodoAction } from '../actions/TodoActions'; 4 | 5 | export interface TodoState { 6 | todos: Todo[]; 7 | } 8 | 9 | const rootReducer: Reducer< 10 | TodoState, 11 | TodoAction, 12 | Partial 13 | > = combineReducers({ 14 | todos, 15 | }) as any; 16 | 17 | export default rootReducer; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/store/configureStore.prod.ts: -------------------------------------------------------------------------------- 1 | import { createStore } from 'redux'; 2 | import rootReducer, { TodoState } from '../reducers'; 3 | 4 | export default function configureStore(initialState?: Partial) { 5 | return createStore(rootReducer, initialState); 6 | } 7 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/src/store/configureStore.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { TodoState } from '../reducers'; 3 | import { TodoAction } from '../actions/TodoActions'; 4 | 5 | const configureStore: ( 6 | initialState?: Partial, 7 | ) => Store = 8 | process.env.NODE_ENV === 'production' 9 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 10 | require('./configureStore.prod').default 11 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./configureStore.dev').default; 13 | export default configureStore; 14 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["webpack-env"] 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/examples/todomvc/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as SliderMonitor } from './SliderMonitor'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/src/reducers.ts: -------------------------------------------------------------------------------- 1 | export default function reducer() { 2 | return {}; 3 | } 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-slider-monitor/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/.gitignore: -------------------------------------------------------------------------------- 1 | storybook-static 2 | *storybook.log 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/README.md: -------------------------------------------------------------------------------- 1 | # Redux DevTools UI 2 | 3 | WIP 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['.storybook', 'lib', 'storybook-static'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/fonts/roboto-mono-v4-latin/roboto-mono-v4-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-ui/fonts/roboto-mono-v4-latin/roboto-mono-v4-latin-regular.woff2 -------------------------------------------------------------------------------- /packages/redux-devtools-ui/fonts/roboto-v15-latin/roboto-v15-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-ui/fonts/roboto-v15-latin/roboto-v15-latin-regular.woff2 -------------------------------------------------------------------------------- /packages/redux-devtools-ui/fonts/source-code-pro-v6-latin/source-code-pro-v6-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-ui/fonts/source-code-pro-v6-latin/source-code-pro-v6-latin-regular.woff2 -------------------------------------------------------------------------------- /packages/redux-devtools-ui/fonts/source-sans-pro-v9-latin/source-sans-pro-v9-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-ui/fonts/source-sans-pro-v9-latin/source-sans-pro-v9-latin-600.woff2 -------------------------------------------------------------------------------- /packages/redux-devtools-ui/fonts/source-sans-pro-v9-latin/source-sans-pro-v9-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/reduxjs/redux-devtools/61632768a7670061d662fa52c6444135b38f1ffd/packages/redux-devtools-ui/fonts/source-sans-pro-v9-latin/source-sans-pro-v9-latin-regular.woff2 -------------------------------------------------------------------------------- /packages/redux-devtools-ui/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | moduleNameMapper: { 5 | '\\.css$': '/test/__mocks__/styleMock.ts', 6 | }, 7 | transform: { 8 | '^.+\\.jsx?$': 'babel-jest', 9 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 10 | }, 11 | transformIgnorePatterns: ['node_modules/(?!.pnpm|color|lodash-es|nanoid)'], 12 | }; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Button/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Button'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Button/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { style as default } from './default'; 2 | export { style as material } from './material'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/ContextMenu/data.ts: -------------------------------------------------------------------------------- 1 | export const items = [ 2 | { 3 | name: 'Menu Item 1', 4 | }, 5 | { 6 | name: 'Menu Item 2', 7 | }, 8 | { 9 | name: 'Menu Item 3', 10 | }, 11 | ]; 12 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/ContextMenu/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './ContextMenu'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Dialog'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Dialog/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { style as default } from './default'; 2 | export { style as material } from './material'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Editor/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Editor'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Form/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Form'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Notification/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Notification'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/SegmentedControl/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './SegmentedControl'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Select/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Select'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Select/options.ts: -------------------------------------------------------------------------------- 1 | export const options = [ 2 | { value: 'one', label: 'One' }, 3 | { value: 'two', label: 'Two' }, 4 | { value: 'hundred', label: 'One hundred' }, 5 | ]; 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Slider/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Slider'; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Slider/styles/common.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { Theme } from '../../themes/default'; 3 | 4 | export const containerStyle = ({ theme }: { theme: Theme }) => css` 5 | display: flex; 6 | align-items: center; 7 | 8 | div { 9 | margin-left: 4px; 10 | padding: 0.3em 0.5em; 11 | border: ${theme.inputBorderWidth}px solid ${theme.inputBorderColor}; 12 | border-radius: ${theme.inputBorderRadius}px; 13 | background-color: ${theme.base00}; 14 | opacity: 0.7; 15 | } 16 | `; 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Slider/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { style as default } from './default'; 2 | export { style as material } from './material'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './Tabs'; 2 | export type { Tab } from './TabsHeader'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Tabs/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { style as default } from './default'; 2 | export { style as material } from './material'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Toolbar/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Toolbar } from './styles/Toolbar'; 2 | export { default as Divider } from './styles/Divider'; 3 | export { default as Spacer } from './styles/Spacer'; 4 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Toolbar/styles/Divider.ts: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | import { Base16Theme } from 'react-base16-styling'; 3 | 4 | const Divider = styled.div` 5 | background-color: ${(props: { 6 | theme?: Base16Theme & { inputHeight?: number }; 7 | }) => props.theme!.base02}; 8 | box-shadow: 1px 1px 2px ${(props) => props.theme.base00}; 9 | height: ${(props) => props.theme.inputHeight || '30'}px; 10 | width: 1px; 11 | margin: auto 3px !important; 12 | flex-shrink: 0; 13 | `; 14 | 15 | export default Divider; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/Toolbar/styles/Spacer.ts: -------------------------------------------------------------------------------- 1 | import styled from '@emotion/styled'; 2 | 3 | const Spacer = styled.div` 4 | flex-grow: 1; 5 | `; 6 | 7 | export default Spacer; 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/atom-one-dark.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'atom one dark', 3 | author: 'Lalit Magant (http://github.com/tilal6991)', 4 | base00: '#282c34', 5 | base01: '#353b45', 6 | base02: '#3e4451', 7 | base03: '#545862', 8 | base04: '#565c64', 9 | base05: '#abb2bf', 10 | base06: '#b6bdca', 11 | base07: '#c8ccd4', 12 | base08: '#e06c75', 13 | base09: '#d19a66', 14 | base0A: '#e5c07b', 15 | base0B: '#98c379', 16 | base0C: '#56b6c2', 17 | base0D: '#61afef', 18 | base0E: '#c678dd', 19 | base0F: '#be5046', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/default.ts: -------------------------------------------------------------------------------- 1 | // Based on unikitty theme and on 2 | // https://github.com/reduxjs/redux-devtools/blob/master/packages/redux-devtools-inspector-monitor/src/themes/inspector.ts 3 | 4 | export default { 5 | scheme: 'default', 6 | author: 'Mihail Diordiev (https://github.com/zalmoxisus)', 7 | base00: '#ffffff', 8 | base01: '#f3f3f3', 9 | base02: '#e8e8e8', 10 | base03: '#b8b8b8', 11 | base04: '#585858', 12 | base05: '#383838', 13 | base06: '#282828', 14 | base07: '#181818', 15 | base08: '#d80000', 16 | base09: '#d65407', 17 | base0A: '#dc8a0e', 18 | base0B: '#236e25', 19 | base0C: '#86c1b9', 20 | base0D: '#1155cc', 21 | base0E: '#aa17e6', 22 | base0F: '#a16946', 23 | }; 24 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/dracula.ts: -------------------------------------------------------------------------------- 1 | // Based on Dracula Theme (http://github.com/dracula) 2 | export default { 3 | scheme: 'dracula', 4 | author: 'Mike Barkmin (http://github.com/mikebarkmin)', 5 | base00: '#282936', 6 | base01: '#3a3c4e', 7 | base02: '#4d4f68', 8 | base03: '#626483', 9 | base04: '#62d6e8', 10 | base05: '#e9e9f4', 11 | base06: '#f1f2f8', 12 | base07: '#f7f7fb', 13 | base08: '#ea51b2', 14 | base09: '#b45bcf', 15 | base0A: '#00f769', 16 | base0B: '#ebff87', 17 | base0C: '#a1efe4', 18 | base0D: '#62d6e8', 19 | base0E: '#b45bcf', 20 | base0F: '#00f769', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/github.ts: -------------------------------------------------------------------------------- 1 | // Modified based on default theme 2 | export default { 3 | scheme: 'github', 4 | author: 'defman21', 5 | base00: '#181818', 6 | base01: '#282828', 7 | base02: '#333333', 8 | base03: '#969896', 9 | base04: '#c8c8fa', 10 | base05: '#e8e8e8', 11 | base06: '#f5f5f5', 12 | base07: '#ffffff', 13 | base08: '#a71d5d', 14 | base09: '#ed6a43', 15 | base0A: '#f7ca88', 16 | base0B: '#a1b56c', 17 | base0C: '#0086b3', 18 | base0D: '#183691', 19 | base0E: '#795da3', 20 | base0F: '#ed6a43', 21 | }; 22 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/ir-black.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'ir black', 3 | author: 'Timothée Poisot (http://timotheepoisot.fr)', 4 | base00: '#000000', 5 | base01: '#242422', 6 | base02: '#484844', 7 | base03: '#6c6c66', 8 | base04: '#918f88', 9 | base05: '#b5b3aa', 10 | base06: '#d9d7cc', 11 | base07: '#fdfbee', 12 | base08: '#ff6c60', 13 | base09: '#e9c062', 14 | base0A: '#ffffb6', 15 | base0B: '#a8ff60', 16 | base0C: '#c6c5fe', 17 | base0D: '#96cbfe', 18 | base0E: '#ff73fd', 19 | base0F: '#b18a3d', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/macintosh.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'macintosh', 3 | author: 'Rebecca Bettencourt (http://www.kreativekorp.com)', 4 | base00: '#000000', 5 | base01: '#404040', 6 | base02: '#404040', 7 | base03: '#808080', 8 | base04: '#808080', 9 | base05: '#c0c0c0', 10 | base06: '#c0c0c0', 11 | base07: '#ffffff', 12 | base08: '#dd0907', 13 | base09: '#ff6403', 14 | base0A: '#fbf305', 15 | base0B: '#1fb714', 16 | base0C: '#02abea', 17 | base0D: '#0000d3', 18 | base0E: '#4700a5', 19 | base0F: '#90713a', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/materia.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'materia', 3 | author: 'defman21', 4 | base00: '#263238', 5 | base01: '#2C393F', 6 | base02: '#37474F', 7 | base03: '#707880', 8 | base04: '#C9CCD3', 9 | base05: '#CDD3DE', 10 | base06: '#D5DBE5', 11 | base07: '#FFFFFF', 12 | base08: '#EC5F67', 13 | base09: '#EA9560', 14 | base0A: '#FFCC00', 15 | base0B: '#8BD649', 16 | base0C: '#80CBC4', 17 | base0D: '#89DDFF', 18 | base0E: '#82AAFF', 19 | base0F: '#EC5F67', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/oceanic-next.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'oceanic next', 3 | author: 'https://github.com/voronianski/oceanic-next-color-scheme', 4 | base00: '#1B2B34', 5 | base01: '#343D46', 6 | base02: '#4F5B66', 7 | base03: '#65737E', 8 | base04: '#A7ADBA', 9 | base05: '#C0C5CE', 10 | base06: '#CDD3DE', 11 | base07: '#D8DEE9', 12 | base08: '#EC5f67', 13 | base09: '#F99157', 14 | base0A: '#FAC863', 15 | base0B: '#99C794', 16 | base0C: '#5FB3B3', 17 | base0D: '#6699CC', 18 | base0E: '#C594C5', 19 | base0F: '#AB7967', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/phd.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'phD', 3 | author: 'Hennig Hasemann (http://leetless.de/vim.html)', 4 | base00: '#061229', 5 | base01: '#2a3448', 6 | base02: '#4d5666', 7 | base03: '#717885', 8 | base04: '#9a99a3', 9 | base05: '#b8bbc2', 10 | base06: '#dbdde0', 11 | base07: '#ffffff', 12 | base08: '#d07346', 13 | base09: '#f0a000', 14 | base0A: '#fbd461', 15 | base0B: '#99bf52', 16 | base0C: '#72b9bf', 17 | base0D: '#5299bf', 18 | base0E: '#9989cc', 19 | base0F: '#b08060', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/pico.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'pico', 3 | author: 'PICO-8 (http://www.lexaloffle.com/pico-8.php)', 4 | base00: '#000000', 5 | base01: '#1d2b53', 6 | base02: '#7e2553', 7 | base03: '#008751', 8 | base04: '#ab5236', 9 | base05: '#5f574f', 10 | base06: '#c2c3c7', 11 | base07: '#fff1e8', 12 | base08: '#ff004d', 13 | base09: '#ffa300', 14 | base0A: '#fff024', 15 | base0B: '#00e756', 16 | base0C: '#29adff', 17 | base0D: '#83769c', 18 | base0E: '#ff77a8', 19 | base0F: '#ffccaa', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/solar-flare.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'solar flare', 3 | author: 'Chuck Harmston (https://chuck.harmston.ch)', 4 | base00: '#18262F', 5 | base01: '#222E38', 6 | base02: '#586875', 7 | base03: '#667581', 8 | base04: '#85939E', 9 | base05: '#A6AFB8', 10 | base06: '#E8E9ED', 11 | base07: '#F5F7FA', 12 | base08: '#EF5253', 13 | base09: '#E66B2B', 14 | base0A: '#E4B51C', 15 | base0B: '#7CC844', 16 | base0C: '#52CBB0', 17 | base0D: '#33B5E1', 18 | base0E: '#A363D5', 19 | base0F: '#D73C9A', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/spacemacs.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'spacemacs', 3 | author: 'Nasser Alshammari (https://github.com/nashamri/spacemacs-theme)', 4 | base00: '#1f2022', 5 | base01: '#282828', 6 | base02: '#444155', 7 | base03: '#585858', 8 | base04: '#b8b8b8', 9 | base05: '#a3a3a3', 10 | base06: '#e8e8e8', 11 | base07: '#f8f8f8', 12 | base08: '#f2241f', 13 | base09: '#ffa500', 14 | base0A: '#b1951d', 15 | base0B: '#67b11d', 16 | base0C: '#2d9574', 17 | base0D: '#4f97d7', 18 | base0E: '#a31db1', 19 | base0F: '#b03060', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/unikitty.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'unikitty', 3 | author: 'Josh W Lewis (@joshwlewis)', 4 | base00: '#2e2a31', 5 | base01: '#4b484e', 6 | base02: '#69666b', 7 | base03: '#878589', 8 | base04: '#a5a3a6', 9 | base05: '#c3c2c4', 10 | base06: '#e1e0e1', 11 | base07: '#ffffff', 12 | base08: '#d8137f', 13 | base09: '#d65407', 14 | base0A: '#dc8a0e', 15 | base0B: '#17ad98', 16 | base0C: '#149bda', 17 | base0D: '#7864fa', 18 | base0E: '#b33ce8', 19 | base0F: '#d41acd', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/colorSchemes/woodland.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | scheme: 'woodland', 3 | author: 'Jay Cornwall (https://jcornwall.com)', 4 | base00: '#231e18', 5 | base01: '#302b25', 6 | base02: '#48413a', 7 | base03: '#9d8b70', 8 | base04: '#b4a490', 9 | base05: '#cabcb1', 10 | base06: '#d7c8bc', 11 | base07: '#e4d4c8', 12 | base08: '#d35c5c', 13 | base09: '#ca7f32', 14 | base0A: '#e0ac16', 15 | base0B: '#b7ba53', 16 | base0C: '#6eb958', 17 | base0D: '#88a4d3', 18 | base0E: '#bb90e2', 19 | base0F: '#b49368', 20 | }; 21 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/themes/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './default'; 2 | export { default as material } from './material'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/themes/material.ts: -------------------------------------------------------------------------------- 1 | import type { Base16Theme } from 'react-base16-styling'; 2 | 3 | export default (colors: Base16Theme) => ({ 4 | fontFamily: "'Roboto', sans-serif", 5 | codeFontFamily: "'Roboto Mono', monospace", 6 | inputPadding: 5, 7 | inputBorderRadius: 0, 8 | inputBorderColor: `transparent transparent ${colors.base02}`, 9 | inputFocusedStyle: `box-shadow: inset 0 -2px 0 ${colors.base0D};`, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/utils/autoPrefix.ts: -------------------------------------------------------------------------------- 1 | export const prefixSelectors = ( 2 | tag: string, 3 | selectors: string[], 4 | style: string, 5 | ) => selectors.map((selector) => `${tag}::-${selector} ${style}`); 6 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/utils/color.ts: -------------------------------------------------------------------------------- 1 | import Color from 'color'; 2 | 3 | /* 4 | Apply color effects like 5 | effect('#ffffff', 'darken', 0.5); 6 | effect('#000000', 'lighten', 0.5); 7 | effect('#000000', 'alpha', 0.5); 8 | */ 9 | 10 | export default ( 11 | color: string, 12 | effect: 'fade' | 'lighten' | 'alpha', 13 | val: number, 14 | ) => new Color(color)[effect](val).hsl().string(); 15 | 16 | // TODO: memoize it 17 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/src/utils/invertColors.ts: -------------------------------------------------------------------------------- 1 | import type { Base16Theme } from 'react-base16-styling'; 2 | 3 | function invertColors(theme: Base16Theme) { 4 | return { 5 | ...theme, 6 | base00: theme.base07, 7 | base01: theme.base06, 8 | base02: theme.base05, 9 | base03: theme.base04, 10 | base04: theme.base03, 11 | base05: theme.base02, 12 | base06: theme.base01, 13 | base07: theme.base00, 14 | }; 15 | } 16 | 17 | export default invertColors; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/Button.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render, screen } from '@testing-library/react'; 3 | import userEvent from '@testing-library/user-event'; 4 | import { Button } from '../src'; 5 | 6 | describe('Button', function () { 7 | it('renders correctly', () => { 8 | const { container } = render(); 9 | expect(container.firstChild).toMatchSnapshot(); 10 | }); 11 | 12 | it('should handle the click event', async () => { 13 | const onClick = jest.fn(); 14 | render(); 15 | 16 | await userEvent.click(screen.getByRole('button')); 17 | expect(onClick).toHaveBeenCalled(); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/Toolbar.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import { Toolbar, Divider, Spacer, Button } from '../src'; 4 | 5 | describe('Toolbar', function () { 6 | it('renders correctly', () => { 7 | const { container } = render( 8 | 9 | 10 | 11 | 12 | 13 | , 14 | ); 15 | expect(container.firstChild).toMatchSnapshot(); 16 | }); 17 | 18 | it('renders with props', () => { 19 | const { container } = render(); 20 | expect(container.firstChild).toMatchSnapshot(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__mocks__/styleMock.ts: -------------------------------------------------------------------------------- 1 | export default {}; 2 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/Button.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Button renders correctly 1`] = ` 4 |
7 | 12 |
13 | `; 14 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/Container.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Container renders correctly 1`] = ` 4 |
7 | Text 8 |
9 | `; 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/ContextMenu.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`ContextMenu renders correctly 1`] = ` 4 |
8 | 13 | 18 | 23 |
24 | `; 25 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/SegmentedControl.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`SegmentedControl renders correctly 1`] = ` 4 |
7 | 13 | 18 | 23 |
24 | `; 25 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/Slider.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Slider renders correctly 1`] = ` 4 |
7 | 13 |
14 | `; 15 | 16 | exports[`Slider renders with props 1`] = ` 17 |
21 | 25 | 32 |
33 | `; 34 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/test/__snapshots__/Toolbar.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Toolbar renders correctly 1`] = ` 4 |
7 |
10 | 15 |
16 |
19 |
22 |
25 | 30 |
31 |
32 | `; 33 | 34 | exports[`Toolbar renders with props 1`] = ` 35 |
38 | `; 39 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": ["node"], 6 | "skipLibCheck": true 7 | }, 8 | "include": ["src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools-ui/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-utils/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-utils/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-typescript" 5 | ], 6 | "plugins": ["@babel/plugin-transform-runtime"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools-utils/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../eslint.ts.config.base.mjs'; 3 | import eslintTsJest from '../../eslint.ts.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTs(import.meta.dirname), 8 | ...eslintTsJest(import.meta.dirname), 9 | { 10 | ignores: ['lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types", 5 | "types": ["node"] 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/babel.config.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults", "modules": false }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { "targets": "defaults" }], 4 | "@babel/preset-react", 5 | "@babel/preset-typescript" 6 | ], 7 | "plugins": ["@babel/plugin-transform-runtime"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../eslint.js.config.base.mjs'; 2 | import eslintTsReact from '../../eslint.ts.react.config.base.mjs'; 3 | import eslintTsReactJest from '../../eslint.ts.react.jest.config.base.mjs'; 4 | 5 | export default [ 6 | ...eslintJs, 7 | ...eslintTsReact(import.meta.dirname), 8 | ...eslintTsReactJest(import.meta.dirname), 9 | { 10 | ignores: ['examples', 'lib'], 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/README.md: -------------------------------------------------------------------------------- 1 | # Redux DevTools Counter example 2 | 3 | ## Running Example 4 | 5 | First, clone the project: 6 | 7 | ``` 8 | git clone https://github.com/reduxjs/redux-devtools.git 9 | ``` 10 | 11 | Then install the dependencies in the package folder: 12 | 13 | ``` 14 | cd redux-devtools/packages/redux-devtools 15 | npm install 16 | ``` 17 | 18 | Install the dependencies in the example folder: 19 | 20 | ``` 21 | cd examples/counter 22 | npm install 23 | ``` 24 | 25 | Finally, run the project: 26 | 27 | ``` 28 | npm start 29 | open http://localhost:3000 30 | ``` 31 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Redux Counter Example 4 | 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/components/Counter.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | interface Props { 4 | increment: () => void; 5 | incrementIfOdd: () => void; 6 | decrement: () => void; 7 | counter: number; 8 | } 9 | 10 | export default class Counter extends Component { 11 | render() { 12 | const { increment, incrementIfOdd, decrement, counter } = this.props; 13 | return ( 14 |

15 | Clicked: {counter} times {' '} 16 | {' '} 17 | 18 |

19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/constants/ActionTypes.ts: -------------------------------------------------------------------------------- 1 | export const INCREMENT_COUNTER = 'INCREMENT_COUNTER'; 2 | export const DECREMENT_COUNTER = 'DECREMENT_COUNTER'; 3 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/containers/DevTools.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createDevTools } from '@redux-devtools/core'; 3 | import { LogMonitor } from '@redux-devtools/log-monitor'; 4 | import { DockMonitor } from '@redux-devtools/dock-monitor'; 5 | 6 | export default createDevTools( 7 | 8 | 9 | , 10 | ); 11 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/containers/Root.prod.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import { Store } from 'redux'; 4 | import CounterApp from './CounterApp'; 5 | import { CounterState } from '../reducers'; 6 | import { CounterAction } from '../actions/CounterActions'; 7 | 8 | interface Props { 9 | store: Store; 10 | } 11 | 12 | export default class Root extends Component { 13 | render() { 14 | const { store } = this.props; 15 | return ( 16 | 17 | 18 | 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/containers/Root.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { CounterState } from '../reducers'; 3 | import { CounterAction } from '../actions/CounterActions'; 4 | import { ComponentType } from 'react'; 5 | 6 | interface Props { 7 | store: Store; 8 | } 9 | const Root: ComponentType = 10 | process.env.NODE_ENV === 'production' 11 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./Root.prod').default 13 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 14 | require('./Root.dev').default; 15 | export default Root; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import configureStore from './store/configureStore'; 4 | import Root from './containers/Root'; 5 | 6 | const store = configureStore(); 7 | 8 | const root = createRoot(document.getElementById('root')!); 9 | root.render(); 10 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/reducers/counter.ts: -------------------------------------------------------------------------------- 1 | import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../constants/ActionTypes'; 2 | import { CounterAction } from '../actions/CounterActions'; 3 | 4 | export default function counter(state = 0, action: CounterAction) { 5 | switch (action.type) { 6 | case INCREMENT_COUNTER: 7 | return state + 1; 8 | case DECREMENT_COUNTER: 9 | return state - 1; 10 | default: 11 | return state; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/reducers/index.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers, Reducer } from 'redux'; 2 | import counter from './counter'; 3 | import { CounterAction } from '../actions/CounterActions'; 4 | 5 | const rootReducer: Reducer< 6 | CounterState, 7 | CounterAction, 8 | Partial 9 | > = combineReducers({ 10 | counter, 11 | }) as any; 12 | 13 | export interface CounterState { 14 | counter: number; 15 | } 16 | 17 | export default rootReducer; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/store/configureStore.prod.ts: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, Middleware } from 'redux'; 2 | import { thunk } from 'redux-thunk'; 3 | import rootReducer, { CounterState } from '../reducers'; 4 | 5 | const enhancer = applyMiddleware(thunk as unknown as Middleware); 6 | 7 | export default function configureStore(initialState?: Partial) { 8 | return createStore(rootReducer, initialState, enhancer); 9 | } 10 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/src/store/configureStore.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { CounterState } from '../reducers'; 3 | import { CounterAction } from '../actions/CounterActions'; 4 | 5 | const configureStore: ( 6 | initialState?: Partial, 7 | ) => Store = 8 | process.env.NODE_ENV === 'production' 9 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 10 | require('./configureStore.prod').default 11 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./configureStore.dev').default; 13 | export default configureStore; 14 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["webpack-env"] 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/counter/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/README.md: -------------------------------------------------------------------------------- 1 | # Redux DevTools todomvc example 2 | 3 | ## Running Example 4 | 5 | First, clone the project: 6 | 7 | ``` 8 | git clone https://github.com/reduxjs/redux-devtools.git 9 | ``` 10 | 11 | Then install the dependencies in the package folder: 12 | 13 | ``` 14 | cd redux-devtools/packages/redux-devtools 15 | npm install 16 | ``` 17 | 18 | Install the dependencies in the example folder: 19 | 20 | ``` 21 | cd examples/todomvc 22 | npm install 23 | ``` 24 | 25 | Finally, run the project: 26 | 27 | ``` 28 | npm start 29 | open http://localhost:3000 30 | ``` 31 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import eslintJs from '../../../../eslint.js.config.base.mjs'; 2 | import eslintTs from '../../../../eslint.ts.react.config.base.mjs'; 3 | 4 | export default [ 5 | ...eslintJs, 6 | ...eslintTs(import.meta.dirname), 7 | ...eslintTs( 8 | import.meta.dirname, 9 | ['webpack.config.ts'], 10 | ['./tsconfig.webpack.json'], 11 | ), 12 | { 13 | ignores: ['dist'], 14 | }, 15 | ]; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Redux TodoMVC 4 | 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import TodoTextInput from './TodoTextInput'; 3 | 4 | interface Props { 5 | addTodo: (text: string) => void; 6 | } 7 | 8 | export default class Header extends Component { 9 | handleSave = (text: string) => { 10 | if (text.length !== 0) { 11 | this.props.addTodo(text); 12 | } 13 | }; 14 | 15 | render() { 16 | return ( 17 |
18 |

todos

19 | 24 |
25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/constants/ActionTypes.ts: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const DELETE_TODO = 'DELETE_TODO'; 3 | export const EDIT_TODO = 'EDIT_TODO'; 4 | export const MARK_TODO = 'MARK_TODO'; 5 | export const MARK_ALL = 'MARK_ALL'; 6 | export const CLEAR_MARKED = 'CLEAR_MARKED'; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/constants/TodoFilters.ts: -------------------------------------------------------------------------------- 1 | export const SHOW_ALL = 'show_all'; 2 | export const SHOW_MARKED = 'show_marked'; 3 | export const SHOW_UNMARKED = 'show_unmarked'; 4 | 5 | export type TodoFilter = 6 | | typeof SHOW_ALL 7 | | typeof SHOW_MARKED 8 | | typeof SHOW_UNMARKED; 9 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/containers/DevTools.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createDevTools } from '@redux-devtools/core'; 3 | import { LogMonitor } from '@redux-devtools/log-monitor'; 4 | import { DockMonitor } from '@redux-devtools/dock-monitor'; 5 | 6 | export default createDevTools( 7 | 8 | 9 | , 10 | ); 11 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/containers/Root.prod.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import TodoApp from './TodoApp'; 4 | import { Store } from 'redux'; 5 | import { TodoState } from '../reducers'; 6 | import { TodoAction } from '../actions/TodoActions'; 7 | 8 | interface Props { 9 | store: Store; 10 | } 11 | 12 | export default class Root extends Component { 13 | render() { 14 | const { store } = this.props; 15 | return ( 16 | 17 | 18 | 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/containers/Root.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { ComponentType } from 'react'; 3 | import { TodoState } from '../reducers'; 4 | import { TodoAction } from '../actions/TodoActions'; 5 | 6 | interface Props { 7 | store: Store; 8 | } 9 | const Root: ComponentType = 10 | process.env.NODE_ENV === 'production' 11 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./Root.prod').default 13 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 14 | require('./Root.dev').default; 15 | export default Root; 16 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/index.tsx: -------------------------------------------------------------------------------- 1 | import 'todomvc-app-css/index.css'; 2 | import React from 'react'; 3 | import { createRoot } from 'react-dom/client'; 4 | import configureStore from './store/configureStore'; 5 | import Root from './containers/Root'; 6 | 7 | const store = configureStore(); 8 | 9 | const root = createRoot(document.getElementById('root')!); 10 | root.render(); 11 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/reducers/index.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers, Reducer } from 'redux'; 2 | import todos, { Todo } from './todos'; 3 | import { TodoAction } from '../actions/TodoActions'; 4 | 5 | export interface TodoState { 6 | todos: Todo[]; 7 | } 8 | 9 | const rootReducer: Reducer< 10 | TodoState, 11 | TodoAction, 12 | Partial 13 | > = combineReducers({ 14 | todos, 15 | }) as any; 16 | 17 | export default rootReducer; 18 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/store/configureStore.prod.ts: -------------------------------------------------------------------------------- 1 | import { createStore } from 'redux'; 2 | import rootReducer, { TodoState } from '../reducers'; 3 | 4 | export default function configureStore(initialState?: Partial) { 5 | return createStore(rootReducer, initialState); 6 | } 7 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/src/store/configureStore.ts: -------------------------------------------------------------------------------- 1 | import { Store } from 'redux'; 2 | import { TodoState } from '../reducers'; 3 | import { TodoAction } from '../actions/TodoActions'; 4 | 5 | const configureStore: ( 6 | initialState?: Partial, 7 | ) => Store = 8 | process.env.NODE_ENV === 'production' 9 | ? // eslint-disable-next-line @typescript-eslint/no-require-imports 10 | require('./configureStore.prod').default 11 | : // eslint-disable-next-line @typescript-eslint/no-require-imports 12 | require('./configureStore.dev').default; 13 | export default configureStore; 14 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["webpack-env"] 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools/examples/todomvc/tsconfig.webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "types": ["node", "webpack-dev-server"] 5 | }, 6 | "include": ["webpack.config.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools/jest.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | transform: { 4 | '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json' }], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/redux-devtools/src/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | instrument, 3 | ActionCreators, 4 | ActionTypes, 5 | type PerformAction, 6 | type LiftedAction, 7 | type LiftedState, 8 | } from '@redux-devtools/instrument'; 9 | export { default as persistState } from './persistState'; 10 | export { default as createDevTools, type Monitor } from './createDevTools'; 11 | -------------------------------------------------------------------------------- /packages/redux-devtools/test/globalLocalStorage.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | interface Global { 3 | localStorage: Storage; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/redux-devtools/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "outDir": "lib/types" 5 | }, 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/redux-devtools/tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.react.base.json", 3 | "compilerOptions": { 4 | "types": ["jest", "node"] 5 | }, 6 | "include": ["src", "test"] 7 | } 8 | -------------------------------------------------------------------------------- /patches/react-icons.patch: -------------------------------------------------------------------------------- 1 | diff --git a/lib/iconBase.d.ts b/lib/iconBase.d.ts 2 | index 9891a022c2be4d36ec8f7f80a0f5380023959e5e..96408ae39ab2025b77011485dd3096e6fb3b60ac 100644 3 | --- a/lib/iconBase.d.ts 4 | +++ b/lib/iconBase.d.ts 5 | @@ -16,4 +16,4 @@ export interface IconBaseProps extends React.SVGAttributes { 6 | export type IconType = (props: IconBaseProps) => React.ReactNode; 7 | export declare function IconBase(props: IconBaseProps & { 8 | attr?: Record; 9 | -}): JSX.Element; 10 | +}): React.JSX.Element; 11 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "moduleResolution": "bundler", 5 | "declaration": true, 6 | "strict": true, 7 | "allowSyntheticDefaultImports": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "types": [] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.esm.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "node16", 5 | "declaration": true, 6 | "strict": true, 7 | "allowSyntheticDefaultImports": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "types": [] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.esm.react.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.esm.base.json", 3 | "compilerOptions": { 4 | "jsx": "react" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /tsconfig.react.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "compilerOptions": { 4 | "jsx": "react" 5 | } 6 | } 7 | --------------------------------------------------------------------------------