├── .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 | ,
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 |
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 |
--------------------------------------------------------------------------------