diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000000..06cc47d9a2
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,35 @@
+{
+ "root": true,
+ "ignorePatterns": ["**/*"],
+ "plugins": ["@nrwl/nx"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "enforceBuildableLibDependency": true,
+ "allow": [],
+ "depConstraints": [
+ {
+ "sourceTag": "*",
+ "onlyDependOnLibsWithTags": ["*"]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "extends": ["plugin:@nrwl/nx/typescript"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "extends": ["plugin:@nrwl/nx/javascript"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/apps/remix-ide/src/app/files/fileManager.js b/apps/remix-ide/src/app/files/fileManager.js
index 07fe178c5e..782eb3c89b 100644
--- a/apps/remix-ide/src/app/files/fileManager.js
+++ b/apps/remix-ide/src/app/files/fileManager.js
@@ -22,7 +22,7 @@ const profile = {
icon: 'assets/img/fileManager.webp',
permission: true,
version: packageJson.version,
- methods: ['closeAllFiles', 'closeFile', 'file', 'exists', 'open', 'writeFile', 'readFile', 'copyFile', 'copyDir', 'rename', 'mkdir', 'readdir', 'remove', 'getCurrentFile', 'getFile', 'getFolder', 'setFile', 'switchFile', 'refresh', 'getProviderOf', 'getProviderByName', 'getPathFromUrl', 'getUrlFromPath', 'saveCurrentFile'],
+ methods: ['closeAllFiles', 'closeFile', 'file', 'exists', 'open', 'writeFile', 'readFile', 'copyFile', 'copyDir', 'rename', 'mkdir', 'readdir', 'remove', 'getCurrentFile', 'getFile', 'getFolder', 'setFile', 'switchFile', 'refresh', 'getProviderOf', 'getProviderByName', 'getPathFromUrl', 'getUrlFromPath', 'saveCurrentFile', 'filesAllClosed'],
kind: 'file-system'
}
const errorMsg = {
diff --git a/apps/remix-ide/src/app/panels/main-view.js b/apps/remix-ide/src/app/panels/main-view.js
index 8a76ee6565..537b296796 100644
--- a/apps/remix-ide/src/app/panels/main-view.js
+++ b/apps/remix-ide/src/app/panels/main-view.js
@@ -54,7 +54,7 @@ export class MainView {
fileManager: self._components.registry.get('filemanager').api
}
- self.tabProxy = new TabProxy(self.fileManager, self.editor, self.appManager)
+ self.tabProxy = new TabProxy(self.fileManager, self.editor)
/*
We listen here on event from the tab component to display / hide the editor and mainpanel
depending on the content that should be displayed
diff --git a/apps/remix-ide/src/app/panels/tab-proxy.js b/apps/remix-ide/src/app/panels/tab-proxy.js
index 887e560c13..ecf5ece29f 100644
--- a/apps/remix-ide/src/app/panels/tab-proxy.js
+++ b/apps/remix-ide/src/app/panels/tab-proxy.js
@@ -1,17 +1,9 @@
+import React from 'react' // eslint-disable-line
+import ReactDOM from 'react-dom'
import { Plugin } from '@remixproject/engine'
-const yo = require('yo-yo')
-const $ = require('jquery')
+import { TabsUI } from '@remix-ui/tabs'
const EventEmitter = require('events')
-const globalRegistry = require('../../global/registry')
-const csjs = require('csjs-inject')
const helper = require('../../lib/helper')
-require('remix-tabs')
-
-const css = csjs`
- .remix_tabs div[title]{
- display: flex;
- }
-`
const profile = {
name: 'tabs',
@@ -21,28 +13,29 @@ const profile = {
// @todo(#650) Merge this with MainPanel into one plugin
export class TabProxy extends Plugin {
- constructor (fileManager, editor, appManager) {
+ constructor (fileManager, editor) {
super(profile)
this.event = new EventEmitter()
this.fileManager = fileManager
- this.appManager = appManager
this.editor = editor
this.data = {}
this._view = {}
this._handlers = {}
this.loadedTabs = []
+ }
- globalRegistry.get('themeModule').api.events.on('themeChanged', (theme) => {
- // update invert for all icons
+ onActivation () {
+ this.on('theme', 'themeChanged', (theme) => {
+ // update invert for all icons
this.updateImgStyles()
})
- fileManager.events.on('filesAllClosed', () => {
+ this.on('fileManager', 'filesAllClosed', () => {
this.call('manager', 'activatePlugin', 'home')
- this._view.filetabs.active = 'home'
+ this.tabsApi.activateTab('home')
})
- fileManager.events.on('fileRemoved', (name) => {
+ this.on('fileManager', 'fileRemoved', (name) => {
const workspace = this.fileManager.currentWorkspace()
if (this.fileManager.mode === 'browser') {
@@ -54,7 +47,7 @@ export class TabProxy extends Plugin {
}
})
- fileManager.events.on('fileClosed', (name) => {
+ this.on('fileManager', 'fileClosed', (name) => {
const workspace = this.fileManager.currentWorkspace()
if (this.fileManager.mode === 'browser') {
@@ -66,14 +59,14 @@ export class TabProxy extends Plugin {
}
})
- fileManager.events.on('currentFileChanged', (file) => {
+ this.on('fileManager', 'currentFileChanged', (file) => {
const workspace = this.fileManager.currentWorkspace()
if (this.fileManager.mode === 'browser') {
const workspacePath = workspace + '/' + file
if (this._handlers[workspacePath]) {
- this._view.filetabs.activateTab(workspacePath)
+ this.tabsApi.activateTab(workspacePath)
return
}
this.addTab(workspacePath, '', () => {
@@ -84,11 +77,12 @@ export class TabProxy extends Plugin {
this.fileManager.closeFile(file)
this.event.emit('closeFile', file)
})
+ this.tabsApi.activateTab(workspacePath)
} else {
const path = file.startsWith(this.fileManager.mode + '/') ? file : this.fileManager.mode + '/' + file
if (this._handlers[path]) {
- this._view.filetabs.activateTab(path)
+ this.tabsApi.activateTab(path)
return
}
this.addTab(path, '', () => {
@@ -99,10 +93,11 @@ export class TabProxy extends Plugin {
this.fileManager.closeFile(file)
this.event.emit('closeFile', file)
})
+ this.tabsApi.activateTab(path)
}
})
- fileManager.events.on('fileRenamed', (oldName, newName, isFolder) => {
+ this.on('fileManager', 'fileRenamed', (oldName, newName, isFolder) => {
const workspace = this.fileManager.currentWorkspace()
if (this.fileManager.mode === 'browser') {
@@ -132,7 +127,7 @@ export class TabProxy extends Plugin {
}
})
- appManager.event.on('activate', ({ name, location, displayName, icon }) => {
+ this.on('manager', 'pluginActivated', ({ name, location, displayName, icon }) => {
if (location === 'mainPanel') {
this.addTab(
name,
@@ -148,32 +143,32 @@ export class TabProxy extends Plugin {
}
})
- appManager.event.on('deactivate', (profile) => {
+ this.on('manager', 'pluginDeactivated', (profile) => {
this.removeTab(profile.name)
})
}
focus (name) {
this.event.emit('switchApp', name)
- this._view.filetabs.activateTab(name)
+ this.tabsApi.activateTab(name)
}
updateImgStyles () {
- const images = this._view.filetabs.getElementsByClassName('iconImage')
+ const images = this.el.getElementsByClassName('iconImage')
for (const element of images) {
- globalRegistry.get('themeModule').api.fixInvert(element)
- };
+ this.call('theme', 'fixInvert', element)
+ }
}
switchTab (tabName) {
if (this._handlers[tabName]) {
this._handlers[tabName].switchTo()
- this._view.filetabs.activateTab(tabName)
+ this.tabsApi.activateTab(tabName)
}
}
switchNextTab () {
- const active = this._view.filetabs.active
+ const active = this.tabsApi.active()
if (active && this._handlers[active]) {
const handlers = Object.keys(this._handlers)
let i = handlers.indexOf(active)
@@ -185,7 +180,7 @@ export class TabProxy extends Plugin {
}
switchPreviousTab () {
- const active = this._view.filetabs.active
+ const active = this.tabsApi.active()
if (active && this._handlers[active]) {
const handlers = Object.keys(this._handlers)
let i = handlers.indexOf(active)
@@ -197,7 +192,7 @@ export class TabProxy extends Plugin {
}
switchToActiveTab () {
- const active = this._view.filetabs.active
+ const active = this.tabsApi.active()
if (active && this._handlers[active]) {
this.switchTab(active)
}
@@ -232,8 +227,12 @@ export class TabProxy extends Plugin {
title = formatPath.join('/')
const titleLength = formatPath.length
this.loadedTabs.push({
+ id: name,
name,
- title
+ title,
+ icon,
+ tooltip: title,
+ iconClass: helper.getPathIcon(name)
})
formatPath.shift()
if (formatPath.length > 0) {
@@ -243,12 +242,8 @@ export class TabProxy extends Plugin {
const duplicateTabTitle = duplicateTabFormatPath.slice(0, titleLength).reverse().join('/')
this.loadedTabs.push({
- name: duplicateTabName,
- title: duplicateTabTitle
- })
- this._view.filetabs.removeTab(duplicateTabName)
- this._view.filetabs.addTab({
id: duplicateTabName,
+ name: duplicateTabName,
title: duplicateTabTitle,
icon,
tooltip: duplicateTabName,
@@ -260,27 +255,25 @@ export class TabProxy extends Plugin {
}
} else {
this.loadedTabs.push({
+ id: name,
name,
- title
+ title,
+ icon,
+ tooltip: title,
+ iconClass: helper.getPathIcon(name)
})
}
- this._view.filetabs.addTab({
- id: name,
- title,
- icon,
- tooltip: name,
- iconClass: helper.getPathIcon(name)
- })
+ this.renderComponent()
this.updateImgStyles()
this._handlers[name] = { switchTo, close }
}
removeTab (name) {
- this._view.filetabs.removeTab(name)
delete this._handlers[name]
this.switchToActiveTab()
this.loadedTabs = this.loadedTabs.filter(tab => tab.name !== name)
+ this.renderComponent()
this.updateImgStyles()
}
@@ -288,63 +281,36 @@ export class TabProxy extends Plugin {
this.handlers[type] = fn
}
- onZoomOut () {
- this.editor.editorFontSize(-1)
- }
+ renderComponent () {
+ const onSelect = (index) => {
+ if (this.loadedTabs[index]) {
+ const name = this.loadedTabs[index].name
+ if (this._handlers[name]) this._handlers[name].switchTo()
+ this.event.emit('tabCountChanged', this.loadedTabs.length)
+ }
+ }
- onZoomIn () {
- this.editor.editorFontSize(1)
- }
+ const onClose = (index) => {
+ if (this.loadedTabs[index]) {
+ const name = this.loadedTabs[index].name
+ if (this._handlers[name]) this._handlers[name].close()
+ this.event.emit('tabCountChanged', this.loadedTabs.length)
+ }
+ }
- renderTabsbar () {
- this._view.filetabs = yo``
- this._view.filetabs.addEventListener('tabClosed', (event) => {
- if (this._handlers[event.detail]) this._handlers[event.detail].close()
- this.event.emit('tabCountChanged', this._view.filetabs.tabs.length)
- })
- this._view.filetabs.addEventListener('tabActivated', (event) => {
- if (this._handlers[event.detail]) this._handlers[event.detail].switchTo()
- this.event.emit('tabCountChanged', this._view.filetabs.tabs.length)
- })
+ const onZoomIn = () => this.editor.editorFontSize(1)
+ const onZoomOut = () => this.editor.editorFontSize(-1)
- this._view.filetabs.canAdd = false
-
- const zoomBtns = yo`
-
- this.onZoomOut()}>
- this.onZoomIn()}>
-
- `
-
- // @todo(#2492) remove style after the mainPanel layout fix.
- this._view.tabs = yo`
-
- ${zoomBtns}
-
- ${this._view.filetabs}
-
- `
-
- // tabs
- var $filesEl = $(this._view.filetabs)
-
- // Switch tab
- var self = this
- $filesEl.on('click', '.file:not(.active)', function (ev) {
- ev.preventDefault()
- var name = $(this).find('.name').text()
- self._handlers[name].switchTo()
- return false
- })
+ const onReady = (api) => { this.tabsApi = api }
- // Remove current tab
- $filesEl.on('click', '.file .remove', function (ev) {
- ev.preventDefault()
- var name = $(this).parent().find('.name').text()
- self._handlers[name].close()
- return false
- })
+ ReactDOM.render(
+
+ , this.el)
+ }
- return this._view.tabs
+ renderTabsbar () {
+ this.el = document.createElement('div')
+ this.renderComponent()
+ return this.el
}
}
diff --git a/apps/remix-ide/src/app/tabs/theme-module.js b/apps/remix-ide/src/app/tabs/theme-module.js
index cbfef2d927..da3f8f9a78 100644
--- a/apps/remix-ide/src/app/tabs/theme-module.js
+++ b/apps/remix-ide/src/app/tabs/theme-module.js
@@ -21,7 +21,7 @@ const themes = [
const profile = {
name: 'theme',
events: ['themeChanged'],
- methods: ['switchTheme', 'getThemes', 'currentTheme'],
+ methods: ['switchTheme', 'getThemes', 'currentTheme', 'fixInvert'],
version: packageJson.version,
kind: 'theme'
}
diff --git a/libs/remix-ui/editor/README.md b/libs/remix-ui/editor/README.md
index 9950c7626a..5e63800aab 100644
--- a/libs/remix-ui/editor/README.md
+++ b/libs/remix-ui/editor/README.md
@@ -1,8 +1,4 @@
# remix-ui-editor
This library was generated with [Nx](https://nx.dev).
-Its purpose is to integrate Monaco editor as a react component inside Remix IDE.
-
-## Running unit tests
-
-Run `nx test remix-ui-editor` to execute the unit tests via [Jest](https://jestjs.io).
+Its purpose is to integrate Monaco editor as a react component inside Remix IDE.
\ No newline at end of file
diff --git a/libs/remix-ui/tabs/.babelrc b/libs/remix-ui/tabs/.babelrc
new file mode 100644
index 0000000000..cf7ddd99c6
--- /dev/null
+++ b/libs/remix-ui/tabs/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": [["@nrwl/web/babel", { "useBuiltIns": "usage" }]]
+}
diff --git a/libs/remix-ui/tabs/.eslintrc b/libs/remix-ui/tabs/.eslintrc
new file mode 100644
index 0000000000..3c2c73bfe9
--- /dev/null
+++ b/libs/remix-ui/tabs/.eslintrc
@@ -0,0 +1,19 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "extends": "../../../.eslintrc",
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly"
+ },
+ "parserOptions": {
+ "ecmaVersion": 11,
+ "sourceType": "module"
+ },
+ "rules": {
+ "no-unused-vars": "off",
+ "@typescript-eslint/no-unused-vars": "error"
+ }
+}
\ No newline at end of file
diff --git a/libs/remix-ui/tabs/README.md b/libs/remix-ui/tabs/README.md
new file mode 100644
index 0000000000..eb7feb53fa
--- /dev/null
+++ b/libs/remix-ui/tabs/README.md
@@ -0,0 +1,4 @@
+# remix-ui-tabs
+
+This library was generated with [Nx](https://nx.dev).
+Its purpose is to integrate tabs for the Remix IDE main view.
\ No newline at end of file
diff --git a/libs/remix-ui/tabs/src/index.ts b/libs/remix-ui/tabs/src/index.ts
new file mode 100644
index 0000000000..5f41e08497
--- /dev/null
+++ b/libs/remix-ui/tabs/src/index.ts
@@ -0,0 +1 @@
+export * from './lib/remix-ui-tabs'
diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.css b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.css
new file mode 100644
index 0000000000..08462647ec
--- /dev/null
+++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.css
@@ -0,0 +1,48 @@
+.remix-ui-tabs {
+ display: -webkit-box;
+ max-height: 42px
+}
+.remix-ui-tabs li {
+ display: inline-block;
+}
+.title-tabs {
+ padding: inherit;
+ align-items: center;
+ padding-right: 8px;
+ padding-left: 2px;
+ cursor: default;
+ /*to make it unselectable*/
+ -webkit-touch-callout: none; /* iOS Safari */
+ -webkit-user-select: none; /* Chrome/Safari/Opera */
+ -khtml-user-select: none; /* Konqueror */
+ -moz-user-select: none; /* Firefox */
+ -ms-user-select: none; /* Internet Explorer/Edge */
+ user-select: none; /* Non-prefixed version, currently supported by any browser but < IE9 */
+ vertical-align: middle;
+}
+.tab:hover .close-tabs{
+ visibility: visible
+}
+.active .close-tabs {
+ visibility: visible
+}
+.close-tabs {
+ visibility: hidden;
+ padding-top: 4px;
+ font-size: medium;
+}
+.iconImage {
+ width: 16px;
+ height: 16px;
+}
+.active {
+ border: 1px solid transparent;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.editor-f1 {
+ height: 49px;
+}
+.editor-zoom {
+ height: 49px;
+}
diff --git a/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx
new file mode 100644
index 0000000000..0c2980116b
--- /dev/null
+++ b/libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx
@@ -0,0 +1,69 @@
+import React, { useState, useRef, useEffect, useReducer } from 'react' // eslint-disable-line
+import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'
+
+import './remix-ui-tabs.css'
+
+/* eslint-disable-next-line */
+export interface TabsUIProps {
+ tabs: Array
+ onSelect: (index: number) => void
+ onClose: (index: number) => void
+ onZoomOut: () => void
+ onZoomIn: () => void
+ onReady: (api: any) => void
+}
+
+export interface TabsUIApi {
+ activateTab: (namee: string) => void
+ active: () => string
+}
+
+export const TabsUI = (props: TabsUIProps) => {
+ const [selectedIndex, setSelectedIndex] = useState(-1)
+ const currentIndexRef = useRef(-1)
+
+ const renderTab = (tab, index) => {
+ const classNameImg = 'my-1 mr-1 text-dark ' + tab.iconClass
+ const classNameTab = 'nav-item nav-link tab' + (index === selectedIndex ? ' active' : '')
+ return (
+
+ {tab.icon ? (
) : (
)}
+
{tab.title}
+
props.onClose(index)}>
+
+
+
+ )
+ }
+
+ const active = () => {
+ return props.tabs[currentIndexRef.current].name
+ }
+ const activateTab = (name: string) => {
+ const index = props.tabs.findIndex((tab) => tab.name === name)
+ setSelectedIndex(index)
+ currentIndexRef.current = index
+ }
+ useEffect(() => {
+ props.onReady({
+ activateTab,
+ active
+ })
+ }, [])
+
+ return (
+
+
+ props.onZoomOut()}>
+ props.onZoomIn()}>
+
+
+
{ props.onSelect(index); setSelectedIndex(index); currentIndexRef.current = index }} >
+ {props.tabs.map((tab, i) => {renderTab(tab, i)})}
+ {props.tabs.map((tab) => )}
+
+
+ )
+}
+
+export default TabsUI
diff --git a/libs/remix-ui/tabs/tsconfig.json b/libs/remix-ui/tabs/tsconfig.json
new file mode 100644
index 0000000000..a7180ef589
--- /dev/null
+++ b/libs/remix-ui/tabs/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "jsx": "react",
+ "allowJs": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true
+ },
+ "files": [],
+ "include": [],
+ "references": [
+ {
+ "path": "./tsconfig.lib.json"
+ },
+ {
+ "path": "./tsconfig.spec.json"
+ }
+ ]
+}
diff --git a/libs/remix-ui/tabs/tsconfig.lib.json b/libs/remix-ui/tabs/tsconfig.lib.json
new file mode 100644
index 0000000000..71adee65df
--- /dev/null
+++ b/libs/remix-ui/tabs/tsconfig.lib.json
@@ -0,0 +1,13 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "types": ["node"]
+ },
+ "files": [
+ "../../node_modules/@nrwl/react/typings/cssmodule.d.ts",
+ "../../node_modules/@nrwl/react/typings/image.d.ts"
+ ],
+ "exclude": ["**/*.spec.ts", "**/*.spec.tsx"],
+ "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"]
+}
diff --git a/nx.json b/nx.json
index be231f010c..9f4c399b8e 100644
--- a/nx.json
+++ b/nx.json
@@ -132,6 +132,9 @@
},
"remix-ui-helper": {
"tags": []
+ },
+ "remix-ui-tabs": {
+ "tags": []
}
},
"targetDependencies": {
diff --git a/package-lock.json b/package-lock.json
index 5fcf108368..c0534af2bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3552,36 +3552,12 @@
"integrity": "sha1-9vGlzl05caSt6RoR0i1MRZrNN18=",
"dev": true
},
- "@fortawesome/fontawesome-common-types": {
- "version": "0.2.36",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz",
- "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==",
- "dev": true
- },
"@fortawesome/fontawesome-free": {
"version": "5.15.4",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz",
"integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==",
"dev": true
},
- "@fortawesome/fontawesome-svg-core": {
- "version": "1.2.36",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz",
- "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==",
- "dev": true,
- "requires": {
- "@fortawesome/fontawesome-common-types": "^0.2.36"
- }
- },
- "@fortawesome/free-solid-svg-icons": {
- "version": "5.15.4",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
- "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==",
- "dev": true,
- "requires": {
- "@fortawesome/fontawesome-common-types": "^0.2.36"
- }
- },
"@gar/promisify": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
@@ -10872,12 +10848,6 @@
"@xtuc/long": "4.2.2"
}
},
- "@webcomponents/webcomponentsjs": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz",
- "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==",
- "dev": true
- },
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -14769,6 +14739,11 @@
}
}
},
+ "clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -16371,12 +16346,6 @@
"ms": "2.0.0"
}
},
- "debug-log": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
- "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
- "dev": true
- },
"debuglog": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
@@ -16642,28 +16611,6 @@
}
}
},
- "deglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
- "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
- "dev": true,
- "requires": {
- "find-root": "^1.0.0",
- "glob": "^7.0.5",
- "ignore": "^3.0.9",
- "pkg-config": "^1.1.0",
- "run-parallel": "^1.1.2",
- "uniq": "^1.0.1"
- },
- "dependencies": {
- "ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- }
- }
- },
"del": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
@@ -17708,12 +17655,6 @@
"integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==",
"dev": true
},
- "eslint-config-standard-jsx": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz",
- "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==",
- "dev": true
- },
"eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -19194,12 +19135,6 @@
"pkg-dir": "^3.0.0"
}
},
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
@@ -19331,12 +19266,6 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
"integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
},
- "font-awesome": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
- "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=",
- "dev": true
- },
"for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -29412,21 +29341,6 @@
}
}
},
- "lit-element": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz",
- "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==",
- "dev": true,
- "requires": {
- "lit-html": "^1.1.1"
- }
- },
- "lit-html": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz",
- "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==",
- "dev": true
- },
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -38654,17 +38568,6 @@
"load-json-file": "^4.0.0"
}
},
- "pkg-config": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
- "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
- "dev": true,
- "requires": {
- "debug-log": "^1.0.0",
- "find-root": "^1.0.0",
- "xtend": "^4.0.1"
- }
- },
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -38779,12 +38682,6 @@
"integrity": "sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY=",
"dev": true
},
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
- },
"portfinder": {
"version": "1.0.28",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
@@ -40033,6 +39930,15 @@
"integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==",
"dev": true
},
+ "react-tabs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.2.tgz",
+ "integrity": "sha512-/o52eGKxFHRa+ssuTEgSM8qORnV4+k7ibW+aNQzKe+5gifeVz8nLxCrsI9xdRhfb0wCLdgIambIpb1qCxaMN+A==",
+ "requires": {
+ "clsx": "^1.1.0",
+ "prop-types": "^15.5.0"
+ }
+ },
"react-transition-group": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
@@ -40481,39 +40387,6 @@
}
}
},
- "remix-store": {
- "version": "0.0.1-alpha.0",
- "resolved": "https://registry.npmjs.org/remix-store/-/remix-store-0.0.1-alpha.0.tgz",
- "integrity": "sha512-OK3ODBig+nxpPh0Aq+oZi5NL99rU1I5bSwNC10Qg4B8ZyIregFt+l5HukzBQBEtNl8kVYfWvjd1NsxizEBekWQ==",
- "dev": true,
- "requires": {
- "events": "^3.0.0"
- }
- },
- "remix-tabs": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/remix-tabs/-/remix-tabs-1.1.3.tgz",
- "integrity": "sha512-Yb61kbFUI874PKpxgOXDMUnGLxYjH6JXSNnNofPed8I+ERJkp5OzXZ17abKwGAF+ZXnAVGGsZnjYYfOfoxiXMw==",
- "dev": true,
- "requires": {
- "@fortawesome/fontawesome-svg-core": "^1.2.14",
- "@fortawesome/free-solid-svg-icons": "^5.7.1",
- "@webcomponents/webcomponentsjs": "^2.2.4",
- "events": "^3.3.0",
- "font-awesome": "^4.7.0",
- "lit-element": "^2.0.0-rc.5",
- "remix-store": "0.0.1-alpha.0",
- "standard": "^12.0.1"
- },
- "dependencies": {
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true
- }
- }
- },
"remove-bom-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
@@ -40668,39 +40541,6 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
- "dev": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
- },
- "dependencies": {
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "^0.2.0"
- }
- },
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
- },
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
- }
- }
- },
"requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -42747,509 +42587,6 @@
"integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==",
"dev": true
},
- "standard": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz",
- "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==",
- "dev": true,
- "requires": {
- "eslint": "~5.4.0",
- "eslint-config-standard": "12.0.0",
- "eslint-config-standard-jsx": "6.0.2",
- "eslint-plugin-import": "~2.14.0",
- "eslint-plugin-node": "~7.0.1",
- "eslint-plugin-promise": "~4.0.0",
- "eslint-plugin-react": "~7.11.1",
- "eslint-plugin-standard": "~4.0.0",
- "standard-engine": "~9.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
- "dev": true
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
- "dev": true
- },
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "eslint": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz",
- "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.0",
- "babel-code-frame": "^6.26.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^4.0.0",
- "eslint-utils": "^1.3.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^4.0.0",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.7.0",
- "ignore": "^4.0.2",
- "imurmurhash": "^0.1.4",
- "inquirer": "^5.2.0",
- "is-resolvable": "^1.1.0",
- "js-yaml": "^3.11.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.5",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
- "progress": "^2.0.0",
- "regexpp": "^2.0.0",
- "require-uncached": "^1.0.3",
- "semver": "^5.5.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "^2.0.1",
- "table": "^4.0.3",
- "text-table": "^0.2.0"
- }
- },
- "eslint-config-standard": {
- "version": "12.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
- "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
- "dev": true
- },
- "eslint-plugin-es": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz",
- "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==",
- "dev": true,
- "requires": {
- "eslint-utils": "^1.4.2",
- "regexpp": "^2.0.1"
- }
- },
- "eslint-plugin-import": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
- "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
- "dev": true,
- "requires": {
- "contains-path": "^0.1.0",
- "debug": "^2.6.8",
- "doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.1",
- "eslint-module-utils": "^2.2.0",
- "has": "^1.0.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.3",
- "read-pkg-up": "^2.0.0",
- "resolve": "^1.6.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "doctrine": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
- "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "isarray": "^1.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "eslint-plugin-node": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz",
- "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==",
- "dev": true,
- "requires": {
- "eslint-plugin-es": "^1.3.1",
- "eslint-utils": "^1.3.1",
- "ignore": "^4.0.2",
- "minimatch": "^3.0.4",
- "resolve": "^1.8.1",
- "semver": "^5.5.0"
- }
- },
- "eslint-plugin-promise": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz",
- "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==",
- "dev": true
- },
- "eslint-plugin-react": {
- "version": "7.11.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
- "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "doctrine": "^2.1.0",
- "has": "^1.0.3",
- "jsx-ast-utils": "^2.0.1",
- "prop-types": "^15.6.2"
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- },
- "espree": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
- "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
- "dev": true,
- "requires": {
- "acorn": "^6.0.2",
- "acorn-jsx": "^5.0.0",
- "eslint-visitor-keys": "^1.0.0"
- }
- },
- "external-editor": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
- "dev": true,
- "requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
- }
- },
- "file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
- "dev": true,
- "requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
- }
- },
- "flat-cache": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
- "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
- "dev": true,
- "requires": {
- "circular-json": "^0.3.1",
- "graceful-fs": "^4.1.2",
- "rimraf": "~2.6.2",
- "write": "^0.2.1"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "inquirer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
- "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.1.0",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^5.5.2",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "jsx-ast-utils": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
- "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
- "dev": true,
- "requires": {
- "array-includes": "^3.1.1",
- "object.assign": "^4.1.0"
- }
- },
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- },
- "regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rxjs": {
- "version": "5.5.12",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
- "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
- "dev": true,
- "requires": {
- "symbol-observable": "1.0.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "symbol-observable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
- "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
- "dev": true
- },
- "table": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
- "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
- "dev": true,
- "requires": {
- "ajv": "^6.0.1",
- "ajv-keywords": "^3.0.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
- }
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- }
- }
- },
- "standard-engine": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz",
- "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==",
- "dev": true,
- "requires": {
- "deglob": "^2.1.0",
- "get-stdin": "^6.0.0",
- "minimist": "^1.1.0",
- "pkg-conf": "^2.0.0"
- }
- },
"state-local": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz",
@@ -45717,12 +45054,6 @@
"set-value": "^2.0.1"
}
},
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
- },
"uniqs": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
diff --git a/package.json b/package.json
index b6d99a91d7..593867260f 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,7 @@
"workspace-schematic": "nx workspace-schematic",
"dep-graph": "nx dep-graph",
"help": "nx help",
- "lint:libs": "nx run-many --target=lint --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd,remix-ui-tree-view,remix-ui-modal-dialog,remix-ui-toaster,remix-ui-helper,remix-ui-debugger-ui,remix-ui-workspace,remix-ui-static-analyser,remix-ui-checkbox,remix-ui-settings,remix-core-plugin,remix-ui-renderer,remix-ui-publish-to-storage,remix-ui-solidity-compiler,remix-ui-plugin-manager,remix-ui-terminal,remix-ui-editor",
+ "lint:libs": "nx run-many --target=lint --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd,remix-ui-tree-view,remix-ui-modal-dialog,remix-ui-toaster,remix-ui-helper,remix-ui-file-explorer,remix-ui-debugger-ui,remix-ui-workspace,remix-ui-static-analyser,remix-ui-checkbox,remix-ui-settings,remix-core-plugin,remix-ui-renderer,remix-ui-publish-to-storage,remix-ui-solidity-compiler,remix-ui-plugin-manager,remix-ui-terminal,remix-ui-editor,remix-ui-tabs",
"build:libs": "nx run-many --target=build --parallel=false --with-deps=true --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd",
"test:libs": "nx run-many --target=test --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd",
"publish:libs": "npm run build:libs && lerna publish --skip-git && npm run bumpVersion:libs",
@@ -180,6 +180,7 @@
"react-beautiful-dnd": "^13.1.0",
"react-bootstrap": "^1.6.4",
"react-dom": "^17.0.2",
+ "react-tabs": "^3.2.2",
"selenium": "^2.20.0",
"signale": "^1.4.0",
"string-similarity": "^4.0.4",
@@ -289,7 +290,6 @@
"nyc": "^13.3.0",
"onchange": "^3.2.1",
"prettier": "1.19.1",
- "remix-tabs": "1.1.3",
"request": "^2.83.0",
"rimraf": "^2.6.1",
"selenium-standalone": "^7.1.0",
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 7121d2e13b..c0f4b6f093 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -16,14 +16,24 @@
"skipDefaultLibCheck": true,
"baseUrl": ".",
"paths": {
- "@remix-project/remix-analyzer": ["dist/libs/remix-analyzer/src/index.js"],
- "@remix-project/remix-astwalker": ["dist/libs/remix-astwalker/src/index.js"],
+ "@remix-project/remix-analyzer": [
+ "dist/libs/remix-analyzer/src/index.js"
+ ],
+ "@remix-project/remix-astwalker": [
+ "dist/libs/remix-astwalker/src/index.js"
+ ],
"@remix-project/remix-debug": ["dist/libs/remix-debug/src/index.js"],
"@remix-project/remix-lib": ["dist/libs/remix-lib/src/index.js"],
- "@remix-project/remix-simulator": ["dist/libs/remix-simulator/src/index.js"],
- "@remix-project/remix-solidity": ["dist/libs/remix-solidity/src/index.js"],
+ "@remix-project/remix-simulator": [
+ "dist/libs/remix-simulator/src/index.js"
+ ],
+ "@remix-project/remix-solidity": [
+ "dist/libs/remix-solidity/src/index.js"
+ ],
"@remix-project/remix-tests": ["dist/libs/remix-tests/src/index.js"],
- "@remix-project/remix-url-resolver": ["dist/libs/remix-url-resolver/src/index.js"],
+ "@remix-project/remix-url-resolver": [
+ "dist/libs/remix-url-resolver/src/index.js"
+ ],
"@remixproject/debugger-plugin": ["apps/debugger/src/index.ts"],
"@remixproject/solidity-compiler-plugin": [
"apps/solidity-compiler/src/index.ts"
@@ -51,10 +61,11 @@
"@remix-ui/publish-to-storage": [
"libs/remix-ui/publish-to-storage/src/index.ts"
],
- "@remix-ui/plugin-manager": ["libs/remix-ui/plugin-manager/src/index.ts"],
"@remix-ui/renderer": ["libs/remix-ui/renderer/src/index.ts"],
"@remix-ui/terminal": ["libs/remix-ui/terminal/src/index.ts"],
+ "@remix-ui/plugin-manager": ["libs/remix-ui/plugin-manager/src/index.ts"],
"@remix-ui/editor": ["libs/remix-ui/editor/src/index.ts"],
+ "@remix-ui/tabs": ["libs/remix-ui/tabs/src/index.ts"],
"@remix-ui/helper": ["libs/remix-ui/helper/src/index.ts"]
}
},
diff --git a/workspace.json b/workspace.json
index f1496361d6..cbf1e710f2 100644
--- a/workspace.json
+++ b/workspace.json
@@ -776,8 +776,8 @@
}
},
"remix-ui-plugin-manager": {
- "root": "libs/remix-ui/plugin-manager",
- "sourceRoot": "libs/remix-ui/plugin-manager/src",
+ "root": "libs/remix-ui/plugin-manager",
+ "sourceRoot": "libs/remix-ui/plugin-manager/src",
"projectType": "library",
"schematics": {},
"architect": {
@@ -1048,6 +1048,21 @@
}
}
}
+ },
+ "remix-ui-tabs": {
+ "root": "libs/remix-ui/tabs",
+ "sourceRoot": "libs/remix-ui/tabs/src",
+ "projectType": "library",
+ "architect": {
+ "lint": {
+ "builder": "@nrwl/linter:lint",
+ "options": {
+ "linter": "eslint",
+ "tsConfig": ["libs/remix-ui/tabs/tsconfig.lib.json"],
+ "exclude": ["**/node_modules/**", "!libs/remix-ui/tabs/**/*"]
+ }
+ }
+ }
}
},
"cli": {