Merge branch 'desktopofflinenoscript' of https://github.com/ethereum/remix-project into flattentree

pull/5370/head
filip mertens 11 months ago
commit dabdf8ca98
  1. 6
      .circleci/config.yml
  2. 2
      apps/circuit-compiler/src/app/components/feedback.tsx
  3. 11
      apps/circuit-compiler/src/main.tsx
  4. 8
      apps/debugger/src/main.tsx
  5. 2
      apps/doc-gen/src/app/views/ErrorView.tsx
  6. 14
      apps/doc-gen/src/main.tsx
  7. 13
      apps/doc-viewer/src/main.tsx
  8. 2
      apps/etherscan/src/app/EtherscanPluginClient.ts
  9. 31
      apps/etherscan/src/app/app.tsx
  10. 14
      apps/etherscan/src/app/components/HeaderWithSettings.tsx
  11. 2
      apps/etherscan/src/app/components/SubmitButton.tsx
  12. 2
      apps/etherscan/src/app/layouts/Default.tsx
  13. 5
      apps/etherscan/src/app/routes.tsx
  14. 97
      apps/etherscan/src/app/views/CaptureKeyView.tsx
  15. 2
      apps/etherscan/src/app/views/ErrorView.tsx
  16. 42
      apps/etherscan/src/app/views/HomeView.tsx
  17. 149
      apps/etherscan/src/app/views/ReceiptsView.tsx
  18. 2
      apps/etherscan/src/app/views/VerifyView.tsx
  19. 17
      apps/etherscan/src/main.tsx
  20. 2
      apps/remix-ide-e2e/src/commands/sendLowLevelTx.ts
  21. 9
      apps/remix-ide-e2e/src/commands/validateValueInput.ts
  22. 60
      apps/remix-ide-e2e/src/helpers/init.ts
  23. 2
      apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx
  24. 13
      apps/remix-ide-e2e/src/local-plugin/src/main.tsx
  25. 4
      apps/remix-ide-e2e/src/tests/editor.test.ts
  26. 6
      apps/remix-ide-e2e/src/tests/editorHoverContext.test.ts
  27. 2
      apps/remix-ide-e2e/src/tests/etherscan_api.test.ts
  28. 2
      apps/remix-ide-e2e/src/tests/plugin_api.ts
  29. 11
      apps/remix-ide-e2e/src/tests/runAndDeploy.test.ts
  30. 4
      apps/remix-ide-e2e/src/tests/staticAnalysis.test.ts
  31. 11
      apps/remix-ide/src/app/components/preload.tsx
  32. 5
      apps/remix-ide/src/app/editor/editor.js
  33. 5
      apps/remix-ide/src/app/files/fileManager.ts
  34. 10
      apps/remix-ide/src/app/plugins/compile-details.tsx
  35. 12
      apps/remix-ide/src/app/plugins/parser/code-parser.tsx
  36. 6
      apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts
  37. 6
      apps/remix-ide/src/app/providers/external-http-provider.tsx
  38. 3
      apps/remix-ide/src/app/tabs/test-tab.js
  39. 13
      apps/remix-ide/src/index.tsx
  40. 13
      apps/solhint/src/main.tsx
  41. 13
      apps/solidity-compiler/src/main.tsx
  42. 6
      apps/vyper/src/app/app.tsx
  43. 16
      apps/vyper/src/main.tsx
  44. 8
      apps/walletconnect/src/main.tsx
  45. 1
      libs/remix-lib/src/types/ICompilerApi.ts
  46. 5
      libs/remix-solidity/src/compiler/compiler.ts
  47. 4
      libs/remix-ui/app/src/lib/remix-app/remix-app.tsx
  48. 2
      libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx
  49. 2
      libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx
  50. 6
      libs/remix-ui/editor/src/lib/actions/editor.ts
  51. 12
      libs/remix-ui/editor/src/lib/remix-ui-editor.tsx
  52. 4
      libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx
  53. 15
      libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx
  54. 2
      libs/remix-ui/helper/src/types/customtooltip.ts
  55. 7
      libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx
  56. 2
      libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx
  57. 4
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  58. 30
      libs/remix-ui/run-tab/src/lib/components/value.tsx
  59. 2
      libs/remix-ui/search/src/lib/components/Search.tsx
  60. 14
      libs/remix-ui/settings/src/lib/remix-ui-settings.tsx
  61. 5
      libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts
  62. 7
      libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts
  63. 15
      libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx
  64. 9
      libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx
  65. 2
      libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx
  66. 6
      libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx
  67. 2
      libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx
  68. 2
      libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx
  69. 5
      libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx
  70. 6
      libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx
  71. 3
      libs/remix-ui/workspace/src/lib/types/index.ts
  72. 2
      libs/remix-url-resolver/src/resolve.ts
  73. 29
      package.json
  74. 345
      yarn.lock

@ -29,9 +29,9 @@ jobs:
name: Build name: Build
command: | command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then if [ "${CIRCLE_BRANCH}" == "master" ]; then
NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NPM_URL=http://localhost:9090/ yarn build:production NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NX_NPM_URL=http://127.0.0.1:9090/ yarn build:production
else else
NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NPM_URL=http://localhost:9090/ yarn build NX_BIN_URL=http://127.0.0.1:8080/assets/js/soljson NX_WASM_URL=http://127.0.0.1:8080/assets/js/soljson NX_NPM_URL=http://127.0.0.1:9090/ yarn build
fi fi
- run: yarn run build:e2e - run: yarn run build:e2e
@ -313,7 +313,7 @@ jobs:
at: . at: .
- run: unzip ./persist/dist.zip - run: unzip ./persist/dist.zip
- run: yarn install --cwd ./apps/remix-ide-e2e --modules-folder ../../node_modules - run: yarn install --cwd ./apps/remix-ide-e2e --modules-folder ../../node_modules
- run: mkdir node_modules/hardhat && wget https://unpkg.com/hardhat/console.sol -O node_modules/hardhat/console.sol
- run: ls -la ./dist/apps/remix-ide/assets/js - run: ls -la ./dist/apps/remix-ide/assets/js
- run: yarn run selenium-install || yarn run selenium-install - run: yarn run selenium-install || yarn run selenium-install
- when: - when:

@ -22,7 +22,7 @@ export function CompilerFeedback ({ feedback, filePathToId, hideWarnings, openEr
<div className="circuit_errors_box py-4"> <div className="circuit_errors_box py-4">
<RenderIf condition={ (typeof feedback === "string") && showException }> <RenderIf condition={ (typeof feedback === "string") && showException }>
<div className="circuit_feedback error alert alert-danger" data-id="circuit_feedback"> <div className="circuit_feedback error alert alert-danger" data-id="circuit_feedback">
<span> { feedback } </span> <span> <>{ feedback }</> </span>
<div className="close" data-id="renderer" onClick={handleCloseException}> <div className="close" data-id="renderer" onClick={handleCloseException}>
<i className="fas fa-times"></i> <i className="fas fa-times"></i>
</div> </div>

@ -1,8 +1,9 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render( const container = document.getElementById('root');
<App />,
document.getElementById('root') if (container) {
) createRoot(container).render(<App />);
}

@ -1,6 +1,10 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render(<App />, document.getElementById('root')) const container = document.getElementById('root');
if (container) {
createRoot(container).render(<App />);
}

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
export const ErrorView: React.FC = () => { export const ErrorView = () => {
return ( return (
<div <div
style={{ style={{

@ -1,11 +1,11 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/App' import App from './app/App'
// import { Routes } from "./routes";
ReactDOM.render( const container = document.getElementById('root');
<React.StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>);
document.getElementById('root'), }
)

@ -1,10 +1,11 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/App' import App from './app/App'
ReactDOM.render( const container = document.getElementById('root');
<React.StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>);
document.getElementById('root') }
)

@ -9,8 +9,8 @@ export class EtherscanPluginClient extends PluginClient {
constructor() { constructor() {
super() super()
createClient(this)
this.internalEvents = new EventManager() this.internalEvents = new EventManager()
createClient(this)
this.onload() this.onload()
} }

@ -40,22 +40,27 @@ const App = () => {
contractsRef.current = contracts contractsRef.current = contracts
useEffect(() => { const setListeners = () => {
plugin.internalEvents.on('etherscan_activated', () => { plugin.on('solidity', 'compilationFinished', (fileName: string, source: CompilationFileSources, languageVersion: string, data: CompilationResult) => {
plugin.on('solidity', 'compilationFinished', (fileName: string, source: CompilationFileSources, languageVersion: string, data: CompilationResult) => { const newContractsNames = getNewContractNames(data)
const newContractsNames = getNewContractNames(data)
const newContractsToSave: string[] = [...contractsRef.current, ...newContractsNames]
const newContractsToSave: string[] = [...contractsRef.current, ...newContractsNames] const uniqueContracts: string[] = [...new Set(newContractsToSave)]
const uniqueContracts: string[] = [...new Set(newContractsToSave)] setContracts(uniqueContracts)
})
plugin.on('blockchain' as any, 'networkStatus', (result) => {
setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`)
})
// @ts-ignore
plugin.call('blockchain', 'getCurrentNetworkStatus').then((result: any) => setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`))
setContracts(uniqueContracts) }
})
plugin.on('blockchain' as any, 'networkStatus', (result) => { useEffect(() => {
setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`) plugin.onload(() => {
}) setListeners()
// @ts-ignore
plugin.call('blockchain', 'getCurrentNetworkStatus').then((result: any) => setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`))
}) })
}, []) }, [])

@ -13,7 +13,7 @@ interface IconProps {
from: string from: string
} }
const HomeIcon: React.FC<IconProps> = ({from}: IconProps) => { const HomeIcon = ({from}: IconProps) => {
return ( return (
<NavLink <NavLink
data-id="home" data-id="home"
@ -31,7 +31,7 @@ const HomeIcon: React.FC<IconProps> = ({from}: IconProps) => {
) )
} }
const ReceiptsIcon: React.FC<IconProps> = ({from}: IconProps) => { const ReceiptsIcon = ({from}: IconProps) => {
return ( return (
<NavLink <NavLink
data-id="receipts" data-id="receipts"
@ -49,7 +49,7 @@ const ReceiptsIcon: React.FC<IconProps> = ({from}: IconProps) => {
) )
} }
const SettingsIcon: React.FC<IconProps> = ({from}: IconProps) => { const SettingsIcon = ({from}: IconProps) => {
return ( return (
<NavLink <NavLink
data-id="settings" data-id="settings"
@ -67,11 +67,9 @@ const SettingsIcon: React.FC<IconProps> = ({from}: IconProps) => {
) )
} }
export const HeaderWithSettings: React.FC<Props> = ({title = '', from}) => { export const HeaderWithSettings = ({title = '', from}) => {
return ( return (
<AppContext.Consumer> <div className="d-flex justify-content-between">
{() => (
<div className="d-flex justify-content-between">
<h6 className="d-inline">{title}</h6> <h6 className="d-inline">{title}</h6>
<div className="nav"> <div className="nav">
<HomeIcon from={from} /> <HomeIcon from={from} />
@ -79,7 +77,5 @@ export const HeaderWithSettings: React.FC<Props> = ({title = '', from}) => {
<SettingsIcon from={from} /> <SettingsIcon from={from} />
</div> </div>
</div> </div>
)}
</AppContext.Consumer>
) )
} }

@ -8,7 +8,7 @@ interface Props {
disable?: boolean disable?: boolean
} }
export const SubmitButton: React.FC<Props> = ({text, dataId, isSubmitting = false, disable = true}) => { export const SubmitButton = ({text, dataId, isSubmitting = false, disable = true}) => {
return ( return (
<div> <div>
<button data-id={dataId} type="submit" className="btn btn-primary btn-block p-1 text-decoration-none" disabled={disable}> <button data-id={dataId} type="submit" className="btn btn-primary btn-block p-1 text-decoration-none" disabled={disable}>

@ -7,7 +7,7 @@ interface Props {
title?: string title?: string
} }
export const DefaultLayout: React.FC<PropsWithChildren<Props>> = ({children, from, title}) => { export const DefaultLayout = ({children, from, title}) => {
return ( return (
<div> <div>
<HeaderWithSettings from={from} title={title} /> <HeaderWithSettings from={from} title={title} />

@ -4,11 +4,6 @@ import {HashRouter as Router, Route, Routes, RouteProps} from 'react-router-dom'
import {ErrorView, HomeView, ReceiptsView, CaptureKeyView} from './views' import {ErrorView, HomeView, ReceiptsView, CaptureKeyView} from './views'
import {DefaultLayout} from './layouts' import {DefaultLayout} from './layouts'
interface Props extends RouteProps {
component: any // TODO: new (props: any) => React.Component
from: string
}
export const DisplayRoutes = () => ( export const DisplayRoutes = () => (
<Router> <Router>
<Routes> <Routes>

@ -1,4 +1,4 @@
import React, {useState} from 'react' import React, {useState, useEffect} from 'react'
import {Formik, ErrorMessage, Field} from 'formik' import {Formik, ErrorMessage, Field} from 'formik'
import {useNavigate, useLocation} from 'react-router-dom' import {useNavigate, useLocation} from 'react-router-dom'
@ -6,59 +6,58 @@ import {useNavigate, useLocation} from 'react-router-dom'
import {AppContext} from '../AppContext' import {AppContext} from '../AppContext'
import {SubmitButton} from '../components' import {SubmitButton} from '../components'
export const CaptureKeyView: React.FC = () => { export const CaptureKeyView = () => {
const location = useLocation() const location = useLocation()
const navigate = useNavigate() const navigate = useNavigate()
const [msg, setMsg] = useState('') const [msg, setMsg] = useState('')
const context = React.useContext(AppContext)
useEffect(() => {
if (!context.apiKey) setMsg('Please provide a 34-character API key to continue')
}, [context.apiKey])
return ( return (
<AppContext.Consumer> <div>
{({apiKey, clientInstance, setAPIKey}) => { <Formik
if (!apiKey) setMsg('Please provide a 34-character API key to continue') initialValues={{apiKey: context.apiKey}}
return ( validate={(values) => {
<div> const errors = {} as any
<Formik if (!values.apiKey) {
initialValues={{apiKey}} errors.apiKey = 'Required'
validate={(values) => { } else if (values.apiKey.length !== 34) {
const errors = {} as any errors.apiKey = 'API key should be 34 characters long'
if (!values.apiKey) { }
errors.apiKey = 'Required' return errors
} else if (values.apiKey.length !== 34) { }}
errors.apiKey = 'API key should be 34 characters long' onSubmit={(values) => {
} const apiKey = values.apiKey
return errors if (apiKey.length === 34) {
}} context.setAPIKey(values.apiKey)
onSubmit={(values) => { navigate(location && location.state ? location.state : '/')
const apiKey = values.apiKey }
if (apiKey.length === 34) { }}
setAPIKey(values.apiKey) >
navigate(location && location.state ? location.state : '/') {({errors, touched, handleSubmit}) => (
} <form onSubmit={handleSubmit}>
}} <div className="form-group mb-2">
> <label htmlFor="apikey">API Key</label>
{({errors, touched, handleSubmit}) => ( <Field
<form onSubmit={handleSubmit}> className={errors.apiKey && touched.apiKey ? 'form-control form-control-sm is-invalid' : 'form-control form-control-sm'}
<div className="form-group mb-2"> type="password"
<label htmlFor="apikey">API Key</label> name="apiKey"
<Field placeholder="e.g. GM1T20XY6JGSAPWKDCYZ7B2FJXKTJRFVGZ"
className={errors.apiKey && touched.apiKey ? 'form-control form-control-sm is-invalid' : 'form-control form-control-sm'} />
type="password" <ErrorMessage className="invalid-feedback" name="apiKey" component="div" />
name="apiKey" </div>
placeholder="e.g. GM1T20XY6JGSAPWKDCYZ7B2FJXKTJRFVGZ"
/>
<ErrorMessage className="invalid-feedback" name="apiKey" component="div" />
</div>
<div> <div>
<SubmitButton text="Save" dataId="save-api-key" disable={errors && errors.apiKey ? true : false} /> <SubmitButton text="Save" dataId="save-api-key" disable={errors && errors.apiKey ? true : false} />
</div> </div>
</form> </form>
)} )}
</Formik> </Formik>
<div data-id="api-key-result" className="text-primary mt-4 text-center" style={{fontSize: '0.8em'}} dangerouslySetInnerHTML={{__html: msg}} /> <div data-id="api-key-result" className="text-primary mt-4 text-center" style={{fontSize: '0.8em'}} dangerouslySetInnerHTML={{__html: msg}} />
</div> </div>
)
}}
</AppContext.Consumer>
) )
} }

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
export const ErrorView: React.FC = () => { export const ErrorView = () => {
return ( return (
<div className="d-flex w-100 flex-column align-items-center"> <div className="d-flex w-100 flex-column align-items-center">
<img className="pb-4" width="250" src="https://res.cloudinary.com/key-solutions/image/upload/v1580400635/solid/error-png.png" alt="Error page" /> <img className="pb-4" width="250" src="https://res.cloudinary.com/key-solutions/image/upload/v1580400635/solid/error-png.png" alt="Error page" />

@ -7,29 +7,25 @@ import {Receipt} from '../types'
import {VerifyView} from './VerifyView' import {VerifyView} from './VerifyView'
export const HomeView: React.FC = () => { export const HomeView = () => {
return ( const context = React.useContext(AppContext)
<AppContext.Consumer>
{({apiKey, clientInstance, setReceipts, receipts, contracts, networkName}) => { return !context.apiKey ? (
return !apiKey ? ( <Navigate
<Navigate to={{
to={{ pathname: '/settings'
pathname: '/settings'
}}
/>
) : (
<VerifyView
contracts={contracts}
client={clientInstance}
apiKey={apiKey}
onVerifiedContract={(receipt: Receipt) => {
const newReceipts = [...receipts, receipt]
setReceipts(newReceipts)
}}
networkName={networkName}
/>
)
}} }}
</AppContext.Consumer> />
) : (
<VerifyView
contracts={context.contracts}
client={context.clientInstance}
apiKey={context.apiKey}
onVerifiedContract={(receipt: Receipt) => {
const newReceipts = [...context.receipts, receipt]
context.setReceipts(newReceipts)
}}
networkName={context.networkName}
/>
) )
} }

@ -13,9 +13,10 @@ interface FormValues {
receiptGuid: string receiptGuid: string
} }
export const ReceiptsView: React.FC = () => { export const ReceiptsView = () => {
const [results, setResults] = useState({succeed: false, message: ''}) const [results, setResults] = useState({succeed: false, message: ''})
const [isProxyContractReceipt, setIsProxyContractReceipt] = useState(false) const [isProxyContractReceipt, setIsProxyContractReceipt] = useState(false)
const context = React.useContext(AppContext)
const onGetReceiptStatus = async (values: FormValues, clientInstance: any, apiKey: string) => { const onGetReceiptStatus = async (values: FormValues, clientInstance: any, apiKey: string) => {
try { try {
@ -48,88 +49,82 @@ export const ReceiptsView: React.FC = () => {
} }
} }
return ( return !context.apiKey ? (
<AppContext.Consumer> <Navigate
{({apiKey, clientInstance, receipts, setReceipts}) => { to={{
return !apiKey ? ( pathname: '/settings'
<Navigate }}
to={{ />
pathname: '/settings' ) : (
}} <div>
/> <Formik
) : ( initialValues={{receiptGuid: ''}}
<div> validate={(values) => {
<Formik const errors = {} as any
initialValues={{receiptGuid: ''}} if (!values.receiptGuid) {
validate={(values) => { errors.receiptGuid = 'Required'
const errors = {} as any }
if (!values.receiptGuid) { return errors
errors.receiptGuid = 'Required' }}
} onSubmit={(values) => onGetReceiptStatus(values, context.clientInstance, context.apiKey)}
return errors >
}} {({errors, touched, handleSubmit, handleChange}) => (
onSubmit={(values) => onGetReceiptStatus(values, clientInstance, apiKey)} <form onSubmit={handleSubmit}>
> <div className="form-group mb-2">
{({errors, touched, handleSubmit, handleChange}) => ( <label htmlFor="receiptGuid">Receipt GUID</label>
<form onSubmit={handleSubmit}> <Field
<div className="form-group mb-2"> className={errors.receiptGuid && touched.receiptGuid ? 'form-control form-control-sm is-invalid' : 'form-control form-control-sm'}
<label htmlFor="receiptGuid">Receipt GUID</label> type="text"
<Field name="receiptGuid"
className={errors.receiptGuid && touched.receiptGuid ? 'form-control form-control-sm is-invalid' : 'form-control form-control-sm'} />
type="text" <ErrorMessage className="invalid-feedback" name="receiptGuid" component="div" />
name="receiptGuid" </div>
/>
<ErrorMessage className="invalid-feedback" name="receiptGuid" component="div" />
</div>
<div className="d-flex mb-2 custom-control custom-checkbox"> <div className="d-flex mb-2 custom-control custom-checkbox">
<Field <Field
className="custom-control-input" className="custom-control-input"
type="checkbox" type="checkbox"
name="isProxyReceipt" name="isProxyReceipt"
id="isProxyReceipt" id="isProxyReceipt"
onChange={async (e) => { onChange={async (e) => {
handleChange(e) handleChange(e)
if (e.target.checked) setIsProxyContractReceipt(true) if (e.target.checked) setIsProxyContractReceipt(true)
else setIsProxyContractReceipt(false) else setIsProxyContractReceipt(false)
}} }}
/> />
<label className="form-check-label custom-control-label" htmlFor="isProxyReceipt"> <label className="form-check-label custom-control-label" htmlFor="isProxyReceipt">
It's a proxy contract GUID It's a proxy contract GUID
</label> </label>
</div> </div>
<SubmitButton text="Check" disable={!touched.receiptGuid || (touched.receiptGuid && errors.receiptGuid) ? true : false} /> <SubmitButton dataId={null} text="Check" disable={!touched.receiptGuid || (touched.receiptGuid && errors.receiptGuid) ? true : false} />
</form> </form>
)} )}
</Formik> </Formik>
<div <div
className={results['succeed'] ? 'text-success mt-3 text-center' : 'text-danger mt-3 text-center'} className={results['succeed'] ? 'text-success mt-3 text-center' : 'text-danger mt-3 text-center'}
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: results.message ? results.message : '' __html: results.message ? results.message : ''
}} }}
/> />
<ReceiptsTable receipts={receipts} /> <ReceiptsTable receipts={context.receipts} />
<br /> <br />
<CustomTooltip tooltipText="Clear the list of receipts" tooltipId="etherscan-clear-receipts" placement="bottom"> <CustomTooltip tooltipText="Clear the list of receipts" tooltipId="etherscan-clear-receipts" placement="bottom">
<Button <Button
className="btn-sm" className="btn-sm"
onClick={() => { onClick={() => {
setReceipts([]) context.setReceipts([])
}} }}
> >
Clear Clear
</Button> </Button>
</CustomTooltip> </CustomTooltip>
</div> </div>
)
}}
</AppContext.Consumer>
) )
} }
const ReceiptsTable: React.FC<{receipts: Receipt[]}> = ({receipts}) => { const ReceiptsTable = ({receipts}) => {
return ( return (
<div className="table-responsive"> <div className="table-responsive">
<h6>Receipts</h6> <h6>Receipts</h6>

@ -24,7 +24,7 @@ interface FormValues {
expectedImplAddress?: string expectedImplAddress?: string
} }
export const VerifyView: React.FC<Props> = ({apiKey, client, contracts, onVerifiedContract, networkName}) => { export const VerifyView = ({apiKey, client, contracts, onVerifiedContract, networkName}) => {
const [results, setResults] = useState('') const [results, setResults] = useState('')
const [selectedContract, setSelectedContract] = useState('') const [selectedContract, setSelectedContract] = useState('')
const [showConstructorArgs, setShowConstructorArgs] = useState(false) const [showConstructorArgs, setShowConstructorArgs] = useState(false)

@ -1,11 +1,14 @@
import {StrictMode} from 'react' import React from 'react'
import * as ReactDOM from 'react-dom' import * as ReactDOM from 'react-dom'
import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render(
<StrictMode> const container = document.getElementById('root');
if (container) {
createRoot(container).render(
<App /> <App />
</StrictMode>, );
document.getElementById('root') }
)

@ -9,7 +9,7 @@ class sendLowLevelTx extends EventEmitter {
.sendKeys(`#instance${address} #deployAndRunLLTxCalldata`, ['_', this.api.Keys.BACK_SPACE, callData]) .sendKeys(`#instance${address} #deployAndRunLLTxCalldata`, ['_', this.api.Keys.BACK_SPACE, callData])
.waitForElementVisible('#value') .waitForElementVisible('#value')
.clearValue('#value') .clearValue('#value')
.sendKeys('#value', ['1', this.api.Keys.BACK_SPACE, value]) .sendKeys('#value', value)
.pause(2000) .pause(2000)
.scrollAndClick(`#instance${address} #deployAndRunLLTxSendTransaction`) .scrollAndClick(`#instance${address} #deployAndRunLLTxSendTransaction`)
.perform(() => { .perform(() => {

@ -5,9 +5,12 @@ class ValidateValueInput extends EventEmitter {
command (this: NightwatchBrowser, selector: string, valueTosSet: string, expectedValue: string) { command (this: NightwatchBrowser, selector: string, valueTosSet: string, expectedValue: string) {
const browser = this.api const browser = this.api
browser.perform((done) => { browser.perform((done) => {
browser.clearValue(selector) browser
.pause(2000) .clearValue(selector)
.setValue(selector, valueTosSet).pause(2000) .execute((selector) => {
(document.querySelector(selector) as any).focus()
}, [selector], () => { })
.setValue(selector, valueTosSet)
.execute(function (selector) { .execute(function (selector) {
const elem = document.querySelector(selector) as HTMLInputElement const elem = document.querySelector(selector) as HTMLInputElement
return elem.value return elem.value

@ -10,8 +10,6 @@ type LoadPlugin = {
export default function (browser: NightwatchBrowser, callback: VoidFunction, url?: string, preloadPlugins = true, loadPlugin?: LoadPlugin, hideToolTips: boolean = true): void { export default function (browser: NightwatchBrowser, callback: VoidFunction, url?: string, preloadPlugins = true, loadPlugin?: LoadPlugin, hideToolTips: boolean = true): void {
browser browser
.url(url || 'http://127.0.0.1:8080') .url(url || 'http://127.0.0.1:8080')
//.switchBrowserTab(0)
.perform((done) => { .perform((done) => {
if (!loadPlugin) return done() if (!loadPlugin) return done()
browser browser
@ -34,35 +32,41 @@ export default function (browser: NightwatchBrowser, callback: VoidFunction, url
} }
addStyle(` addStyle(`
.bs-popover-right { .popover {
display:none !important; display:none !important;
} }
.bs-popover-top {
display:none !important;
}
.bs-popover-left {
display:none !important;
}
.bs-popover-bottom {
display:none !important;
}
`); `);
}) })
} }})
if (preloadPlugins) { .perform(() => {
initModules(browser, () => { browser.execute(function () {
browser (window as any).logs = [];
.clickLaunchIcon('solidity') (console as any).browserLog = console.log;
.waitForElementVisible('[for="autoCompile"]') (console as any).browserError = console.error
.click('[for="autoCompile"]') console.log = function () {
.verify.elementPresent('[data-id="compilerContainerAutoCompile"]:checked') (window as any).logs.push(JSON.stringify(arguments));
.perform(() => { callback() }) (console as any).browserLog(...arguments)
}
console.error = function () {
(window as any).logs.push(JSON.stringify(arguments));
(console as any).browserError(...arguments)
}
}) })
})
} else { .perform(() => {
callback() if (preloadPlugins) {
} initModules(browser, () => {
}) browser
.clickLaunchIcon('solidity')
.waitForElementVisible('[for="autoCompile"]')
.click('[for="autoCompile"]')
.verify.elementPresent('[data-id="compilerContainerAutoCompile"]:checked')
.perform(() => { callback() })
})
} else {
callback()
}
})
} }
function initModules(browser: NightwatchBrowser, callback: VoidFunction) { function initModules(browser: NightwatchBrowser, callback: VoidFunction) {

@ -4,7 +4,7 @@ interface loggerProps {
id: string id: string
} }
export const Logger: React.FC<loggerProps> = (props) => { export const Logger = (props) => {
return ( return (
<div id={props.id} className="jumbotron overflow-auto text-break mb-1 p-2"> <div id={props.id} className="jumbotron overflow-auto text-break mb-1 p-2">
{props.log} {props.log}

@ -1,11 +1,12 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render( const container = document.getElementById('root');
<React.StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>);
document.getElementById('root') }
)

@ -20,13 +20,13 @@ module.exports = {
.checkElementStyle('.view-lines', 'font-size', '14px') .checkElementStyle('.view-lines', 'font-size', '14px')
.click('*[data-id="tabProxyZoomIn"]') .click('*[data-id="tabProxyZoomIn"]')
.click('*[data-id="tabProxyZoomIn"]') .click('*[data-id="tabProxyZoomIn"]')
.checkElementStyle('.view-lines', 'font-size', '16px') .checkElementStyle('.view-lines', 'font-size', '16.8px')
}, },
'Should zoom out editor #group1': function (browser: NightwatchBrowser) { 'Should zoom out editor #group1': function (browser: NightwatchBrowser) {
browser browser
.waitForElementVisible('#editorView') .waitForElementVisible('#editorView')
.checkElementStyle('.view-lines', 'font-size', '16px') .checkElementStyle('.view-lines', 'font-size', '16.8px')
.click('*[data-id="tabProxyZoomOut"]') .click('*[data-id="tabProxyZoomOut"]')
.click('*[data-id="tabProxyZoomOut"]') .click('*[data-id="tabProxyZoomOut"]')
.checkElementStyle('.view-lines', 'font-size', '14px') .checkElementStyle('.view-lines', 'font-size', '14px')

@ -15,9 +15,9 @@ const checkEditorHoverContent = (browser: NightwatchBrowser, path: string, expec
module.exports = { module.exports = {
'@disabled': true, '@disabled': true,
before: function (browser: NightwatchBrowser, done: VoidFunction) { before: function (browser: NightwatchBrowser, done: VoidFunction) {
init(browser, done, 'http://127.0.0.1:8080', false) init(browser, done, 'http://127.0.0.1:8080', false, null, true)
}, },
'Should load the test file': function (browser: NightwatchBrowser) { 'Should load the test file #group1': function (browser: NightwatchBrowser) {
browser.openFile('contracts') browser.openFile('contracts')
.openFile('contracts/3_Ballot.sol') .openFile('contracts/3_Ballot.sol')
.waitForElementVisible('#editorView') .waitForElementVisible('#editorView')
@ -86,7 +86,7 @@ module.exports = {
const expectedContent = 'StructDefinition' const expectedContent = 'StructDefinition'
checkEditorHoverContent(browser, path, expectedContent) checkEditorHoverContent(browser, path, expectedContent)
}, },
'Add token file': function (browser: NightwatchBrowser) { 'Add token file #group1': function (browser: NightwatchBrowser) {
browser browser
.clickLaunchIcon('solidity') .clickLaunchIcon('solidity')
.setSolidityCompilerVersion('soljson-v0.8.20+commit.a1b79de6.js') .setSolidityCompilerVersion('soljson-v0.8.20+commit.a1b79de6.js')

@ -45,7 +45,7 @@ module.exports = {
.setValue('*[name="contractAddress"]', ['0x9981c9d00103da481c3c65b22a79582a3e3ff50b', browser.Keys.TAB]) .setValue('*[name="contractAddress"]', ['0x9981c9d00103da481c3c65b22a79582a3e3ff50b', browser.Keys.TAB])
.click('[data-id="verify-contract"]') .click('[data-id="verify-contract"]')
.waitForElementVisible('[data-id="verify-result"]') .waitForElementVisible('[data-id="verify-result"]')
.waitForElementContainsText('[data-id="verify-result"]', 'Contract source code already verified') .waitForElementContainsText('[data-id="verify-result"]', 'Contract source code already verified', 15000)
}, },
'Should call the etherscan plugin api #group1': function (browser: NightwatchBrowser) { 'Should call the etherscan plugin api #group1': function (browser: NightwatchBrowser) {

@ -431,7 +431,7 @@ module.exports = {
.waitForElementContainsText('*[data-shared="tooltipPopup"]', 'I am a re-toast') .waitForElementContainsText('*[data-shared="tooltipPopup"]', 'I am a re-toast')
}, },
'Should open 2 alerts from localplugin #group9': function (browser: NightwatchBrowser) { 'Should open 2 alerts from localplugin #group9': !function (browser: NightwatchBrowser) {
browser browser
.clickLaunchIcon('localPlugin') .clickLaunchIcon('localPlugin')
.useXpath() .useXpath()

@ -25,9 +25,10 @@ module.exports = {
'Should load run and deploy tab and check value validation #group1': function (browser: NightwatchBrowser) { 'Should load run and deploy tab and check value validation #group1': function (browser: NightwatchBrowser) {
browser.waitForElementPresent('*[data-id="remixIdeSidePanel"]') browser.waitForElementPresent('*[data-id="remixIdeSidePanel"]')
.assert.containsText('*[data-id="sidePanelSwapitTitle"]', 'DEPLOY & RUN TRANSACTIONS') .assert.containsText('*[data-id="sidePanelSwapitTitle"]', 'DEPLOY & RUN TRANSACTIONS')
.validateValueInput('#value', '0000', '0') .validateValueInput('*[data-id="dandrValue"]', '999', '999')
.validateValueInput('#value', '', '0') .validateValueInput('*[data-id="dandrValue"]', '0000', '0')
.validateValueInput('#value', 'dragon', '0') .validateValueInput('*[data-id="dandrValue"]', '1.3', '0') // no decimal
// .validateValueInput('*[data-id="dandrValue"]', 'dragon', '0') // only numbers
}, },
'Should sign message using account key #group2': function (browser: NightwatchBrowser) { 'Should sign message using account key #group2': function (browser: NightwatchBrowser) {
@ -81,10 +82,10 @@ module.exports = {
instanceAddress = address instanceAddress = address
browser browser
.waitForElementVisible(`#instance${instanceAddress} [data-id="instanceContractBal"]`) .waitForElementVisible(`#instance${instanceAddress} [data-id="instanceContractBal"]`)
.assert.containsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000111 ETH') .waitForElementContainsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000111 ETH', 10000)
.clickFunction('sendSomeEther - transact (not payable)', { types: 'uint256 num', values: '2' }) .clickFunction('sendSomeEther - transact (not payable)', { types: 'uint256 num', values: '2' })
.pause(1000) .pause(1000)
.assert.containsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000109 ETH') .waitForElementContainsText(`#instance${instanceAddress} [data-id="instanceContractBal"]`, 'Balance: 0.000000000000000109 ETH', 10000)
}) })
}, },

@ -46,14 +46,14 @@ module.exports = {
.waitForElementPresent('//*[@id="staticanalysisresult"]', 5000) .waitForElementPresent('//*[@id="staticanalysisresult"]', 5000)
.useCss() .useCss()
// Check warning count // Check warning count
.click('*[data-rb-event-key="remix"]') .click('*[data-rr-ui-event-key="remix"]')
.assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount"]', '1') .assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount"]', '1')
.verify.elementPresent('input[name="showLibWarnings"]') .verify.elementPresent('input[name="showLibWarnings"]')
.verify.not.elementPresent('input[name="showLibWarnings"]:checked') .verify.not.elementPresent('input[name="showLibWarnings"]:checked')
.verify.elementPresent('label[id="headingshowLibWarnings"]') .verify.elementPresent('label[id="headingshowLibWarnings"]')
.click('label[id="headingshowLibWarnings"]') .click('label[id="headingshowLibWarnings"]')
.pause(1000) .pause(1000)
.click('*[data-rb-event-key="remix"]') .click('*[data-rr-ui-event-key="remix"]')
.assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount', '386') .assert.containsText('span#ssaRemixtab > *[data-id="RemixStaticAnalysisErrorCount', '386')
.click('label[id="headingshowLibWarnings"]') .click('label[id="headingshowLibWarnings"]')
.pause(1000) .pause(1000)

@ -1,6 +1,6 @@
import {RemixApp} from '@remix-ui/app' import {RemixApp} from '@remix-ui/app'
import React, {useEffect, useRef, useState} from 'react' import React, {useEffect, useRef, useState} from 'react'
import {render} from 'react-dom' import { createRoot } from 'react-dom/client'
import * as packageJson from '../../../../../package.json' import * as packageJson from '../../../../../package.json'
import {fileSystem, fileSystems} from '../files/fileSystem' import {fileSystem, fileSystems} from '../files/fileSystem'
import {indexedDBFileSystem} from '../files/filesystems/indexedDB' import {indexedDBFileSystem} from '../files/filesystems/indexedDB'
@ -10,7 +10,7 @@ import './styles/preload.css'
import isElectron from 'is-electron' import isElectron from 'is-electron'
const _paq = (window._paq = window._paq || []) const _paq = (window._paq = window._paq || [])
export const Preload = () => { export const Preload = (props: any) => {
const [supported, setSupported] = useState<boolean>(true) const [supported, setSupported] = useState<boolean>(true)
const [error, setError] = useState<boolean>(false) const [error, setError] = useState<boolean>(false)
const [showDownloader, setShowDownloader] = useState<boolean>(false) const [showDownloader, setShowDownloader] = useState<boolean>(false)
@ -33,12 +33,7 @@ export const Preload = () => {
.then((AppComponent) => { .then((AppComponent) => {
const appComponent = new AppComponent.default() const appComponent = new AppComponent.default()
appComponent.run().then(() => { appComponent.run().then(() => {
render( props.root.render(<RemixApp app={appComponent} />)
<>
<RemixApp app={appComponent} />
</>,
document.getElementById('root')
)
}) })
}) })
.catch((err) => { .catch((err) => {

@ -402,10 +402,7 @@ class Editor extends Plugin {
*/ */
editorFontSize (incr) { editorFontSize (incr) {
if (!this.activated) return if (!this.activated) return
const newSize = this.api.getFontSize() + incr this.emit('setFontSize', incr)
if (newSize >= 6) {
this.emit('setFontSize', newSize)
}
} }
/** /**

@ -619,7 +619,10 @@ class FileManager extends Plugin {
if (!provider) throw createError({ code: 'ENOENT', message: `${path} not available` }) if (!provider) throw createError({ code: 'ENOENT', message: `${path} not available` })
// TODO: change provider to Promise // TODO: change provider to Promise
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.currentFile() === path) return resolve(this.editor.currentContent()) if (this.currentFile() === path) {
const editorContent = this.editor.currentContent()
if(editorContent) resolve(editorContent)
}
provider.get(path, (err, content) => { provider.get(path, (err, content) => {
if (err) reject(err) if (err) reject(err)
resolve(content) resolve(content)

@ -35,8 +35,6 @@ export class CompilationDetailsPlugin extends ViewPlugin {
} }
async onActivation() { async onActivation() {
await this.call('tabs', 'focus', 'compilationDetails')
this.renderComponent()
_paq.push(['trackEvent', 'plugin', 'activated', 'compilationDetails']) _paq.push(['trackEvent', 'plugin', 'activated', 'compilationDetails'])
} }
@ -46,13 +44,17 @@ export class CompilationDetailsPlugin extends ViewPlugin {
async showDetails(sentPayload: any) { async showDetails(sentPayload: any) {
await this.call('tabs', 'focus', 'compilationDetails') await this.call('tabs', 'focus', 'compilationDetails')
this.payload = sentPayload setTimeout(() => {
this.renderComponent() // TODO: use the react API to render when the tab is focused and tbe plugin in the view.
this.payload = sentPayload
this.renderComponent()
}, 2000)
} }
setDispatch(dispatch: React.Dispatch<any>): void { setDispatch(dispatch: React.Dispatch<any>): void {
this.dispatch = dispatch this.dispatch = dispatch
} }
render() { render() {
return ( return (
<div id="compileDetails"> <div id="compileDetails">

@ -193,11 +193,19 @@ export class CodeParser extends Plugin {
}) })
this.on('config', 'configChanged', async (config) => { this.on('config', 'configChanged', async (config) => {
await this.reload() if (config.key === 'settings/auto-completion' ||
config.key === 'settings/display-errors' ||
config.key === 'settings/show-gas') {
await this.reload()
}
}) })
this.on('settings', 'configChanged', async (config) => { this.on('settings', 'configChanged', async (config) => {
await this.reload() if (config.key === 'settings/auto-completion' ||
config.key === 'settings/display-errors' ||
config.key === 'settings/show-gas') {
await this.reload()
}
}) })
await this.compilerService.init() await this.compilerService.init()

@ -48,7 +48,7 @@ export default class CodeParserCompiler {
init() { init() {
this.onAstFinished = async (success, data: CompilationResult, source: CompilationSourceCode, input: any, version) => { this.onAstFinished = async (success, data: CompilationResult, source: CompilationSourceCode, input: any, version) => {
this.plugin.call('editor', 'clearAnnotations') await this.plugin.call('editor', 'clearAnnotations')
this.errorState = true this.errorState = true
const result = new CompilerAbstract('soljson', data, source, input) const result = new CompilerAbstract('soljson', data, source, input)
let allErrors: errorMarker[] = [] let allErrors: errorMarker[] = []
@ -93,7 +93,7 @@ export default class CodeParserCompiler {
const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors')
if (displayErrors) await this.plugin.call('editor', 'addErrorMarker', allErrors) if (displayErrors) await this.plugin.call('editor', 'addErrorMarker', allErrors)
this.addDecorators(allErrors, sources) await this.addDecorators(allErrors, sources)
} else { } else {
await this.plugin.call('editor', 'clearErrorMarkers', result.getSourceCode().sources) await this.plugin.call('editor', 'clearErrorMarkers', result.getSourceCode().sources)
await this.clearDecorators(result.getSourceCode().sources) await this.clearDecorators(result.getSourceCode().sources)
@ -168,8 +168,6 @@ export default class CodeParserCompiler {
} }
this.compiler.set('configFileContent', JSON.stringify(configFileContent)) this.compiler.set('configFileContent', JSON.stringify(configFileContent))
this.plugin.currentFile = await this.plugin.call('fileManager', 'file')
if (!this.plugin.currentFile) return
const content = await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) const content = await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile)
const sources = { [this.plugin.currentFile]: { content } } const sources = { [this.plugin.currentFile]: { content } }
this.compiler.compile(sources, this.plugin.currentFile) this.compiler.compile(sources, this.plugin.currentFile)

@ -27,7 +27,7 @@ export class ExternalHttpProvider extends AbstractProvider {
values={{ values={{
a: (chunks) => ( a: (chunks) => (
<a href="https://geth.ethereum.org/docs/rpc/server" target="_blank" rel="noreferrer"> <a href="https://geth.ethereum.org/docs/rpc/server" target="_blank" rel="noreferrer">
{chunks} <>{chunks}</>
</a> </a>
) )
}} }}
@ -39,7 +39,7 @@ export class ExternalHttpProvider extends AbstractProvider {
values={{ values={{
a: (chunks) => ( a: (chunks) => (
<a href="https://geth.ethereum.org/getting-started/dev-mode" target="_blank" rel="noreferrer"> <a href="https://geth.ethereum.org/getting-started/dev-mode" target="_blank" rel="noreferrer">
{chunks} <>{chunks}</>
</a> </a>
) )
}} }}
@ -49,7 +49,7 @@ export class ExternalHttpProvider extends AbstractProvider {
</div> </div>
<br /> <br />
<br /> <br />
<FormattedMessage id="udapp.externalHttpProviderText3" values={{b: (chunks) => <b>{chunks}</b>}} /> <FormattedMessage id="udapp.externalHttpProviderText3" values={{b: (chunks) => <b><>{chunks}</></b>}} />
<br /> <br />
<br /> <br />
<FormattedMessage <FormattedMessage

@ -81,13 +81,14 @@ module.exports = class TestTab extends ViewPlugin {
onDeactivation () { onDeactivation () {
this.off('filePanel', 'newTestFileCreated') this.off('filePanel', 'newTestFileCreated')
this.off('filePanel', 'setWorkspace') this.off('filePanel', 'setWorkspace')
this.off('filePanel', 'workspaceCreated')
// 'currentFileChanged' event is added more than once // 'currentFileChanged' event is added more than once
this.fileManager.events.removeAllListeners('currentFileChanged') this.fileManager.events.removeAllListeners('currentFileChanged')
} }
listenToEvents () { listenToEvents () {
this.on('filePanel', 'workspaceCreated', async () => { this.on('filePanel', 'workspaceCreated', async () => {
this.createTestLibs() setTimeout(() => this.createTestLibs(), 50)
}) })
this.testRunner.event.on('compilationFinished', (success, data, source, input, version) => { this.testRunner.event.on('compilationFinished', (success, data, source, input, version) => {

@ -1,6 +1,5 @@
// eslint-disable-next-line no-use-before-define // eslint-disable-next-line no-use-before-define
import React from 'react' import React from 'react'
import {render} from 'react-dom'
import './index.css' import './index.css'
import {ThemeModule} from './app/tabs/theme-module' import {ThemeModule} from './app/tabs/theme-module'
import {Preload} from './app/components/preload' import {Preload} from './app/components/preload'
@ -8,6 +7,7 @@ import Config from './config'
import {Registry} from '@remix-project/remix-lib' import {Registry} from '@remix-project/remix-lib'
import {Storage} from '@remix-project/remix-lib' import {Storage} from '@remix-project/remix-lib'
import { createRoot } from 'react-dom/client'
;(async function () { ;(async function () {
try { try {
@ -18,10 +18,9 @@ import {Storage} from '@remix-project/remix-lib'
const theme = new ThemeModule() const theme = new ThemeModule()
theme.initTheme() theme.initTheme()
render( const container = document.getElementById('root');
<Preload></Preload> const root = createRoot(container)
, if (container) {
document.getElementById('root') root.render(<Preload root={root} />);
) }
})() })()

@ -1,10 +1,11 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/App' import App from './app/App'
ReactDOM.render( const container = document.getElementById('root');
<React.StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>);
document.getElementById('root') }
)

@ -1,12 +1,13 @@
// eslint-disable-next-line no-use-before-define // eslint-disable-next-line no-use-before-define
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render( const container = document.getElementById('root');
<React.StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</React.StrictMode>, </React.StrictMode>);
document.getElementById('root') }
)

@ -25,7 +25,7 @@ interface OutputMap {
[fileName: string]: VyperCompilationOutput [fileName: string]: VyperCompilationOutput
} }
const App: React.FC = () => { const App = () => {
const [contract, setContract] = useState<string>() const [contract, setContract] = useState<string>()
const [output, setOutput] = useState<OutputMap>({}) const [output, setOutput] = useState<OutputMap>({})
const [state, setState] = useState<AppState>({ const [state, setState] = useState<AppState>({
@ -82,10 +82,10 @@ const App: React.FC = () => {
</Button> </Button>
</div> </div>
<ToggleButtonGroup name="remote" onChange={setEnvironment} type="radio" value={state.environment}> <ToggleButtonGroup name="remote" onChange={setEnvironment} type="radio" value={state.environment}>
<ToggleButton data-id="remote-compiler" variant="secondary" name="remote" value="remote"> <ToggleButton id="remote-compiler" data-id="remote-compiler" variant="secondary" name="remote" value="remote">
Remote Compiler v0.2.16 Remote Compiler v0.2.16
</ToggleButton> </ToggleButton>
<ToggleButton data-id="local-compiler" variant="secondary" name="local" value="local"> <ToggleButton id="local-compiler" data-id="local-compiler" variant="secondary" name="local" value="local">
Local Compiler Local Compiler
</ToggleButton> </ToggleButton>
</ToggleButtonGroup> </ToggleButtonGroup>

@ -1,11 +1,13 @@
import {StrictMode} from 'react' import React from 'react'
import * as ReactDOM from 'react-dom' import * as ReactDOM from 'react-dom'
import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render( const container = document.getElementById('root');
<StrictMode>
if (container) {
createRoot(container).render(<React.StrictMode>
<App /> <App />
</StrictMode>, </React.StrictMode>);
document.getElementById('root') }
)

@ -1,5 +1,9 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import { createRoot } from 'react-dom/client';
import App from './app/app' import App from './app/app'
ReactDOM.render(<App />, document.getElementById('root')) const container = document.getElementById('root');
if (container) {
createRoot(container).render(<App />);
}

@ -48,6 +48,7 @@ export interface ICompilerApi {
emit?: (key: string, ...payload: any) => void emit?: (key: string, ...payload: any) => void
setSolJsonBinData: (binData: iSolJsonBinData) => void setSolJsonBinData: (binData: iSolJsonBinData) => void
solJsonBinData: iSolJsonBinData
} }
export interface iSolJsonBinDataBuild { export interface iSolJsonBinDataBuild {

@ -50,7 +50,6 @@ export class Compiler {
if (success && this.state.compilationStartTime) { if (success && this.state.compilationStartTime) {
this.event.trigger('compilationDuration', [(new Date().getTime()) - this.state.compilationStartTime]) this.event.trigger('compilationDuration', [(new Date().getTime()) - this.state.compilationStartTime])
} }
this.state.compilationStartTime = null
}) })
this.event.register('compilationStarted', () => { this.event.register('compilationStarted', () => {
@ -83,7 +82,7 @@ export class Compiler {
*/ */
internalCompile(files: Source, missingInputs?: string[], timeStamp?: number): void { internalCompile(files: Source, missingInputs?: string[], timeStamp?: number): void {
if(timeStamp != this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) { if(timeStamp < this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) {
return return
} }
this.gatherImports(files, missingInputs, (error, input) => { this.gatherImports(files, missingInputs, (error, input) => {
@ -294,7 +293,7 @@ export class Compiler {
this.state.worker.addEventListener('message', (msg: Record<'data', MessageFromWorker>) => { this.state.worker.addEventListener('message', (msg: Record<'data', MessageFromWorker>) => {
const data: MessageFromWorker = msg.data const data: MessageFromWorker = msg.data
if (this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger && data.timestamp !== this.state.compilationStartTime) { if (this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger && data.timestamp < this.state.compilationStartTime) {
// drop message from previous compilation // drop message from previous compilation
return return
} }

@ -8,7 +8,7 @@ import DragBar from './components/dragbar/dragbar'
import { AppProvider } from './context/provider' import { AppProvider } from './context/provider'
import AppDialogs from './components/modals/dialogs' import AppDialogs from './components/modals/dialogs'
import DialogViewPlugin from './components/modals/dialogViewPlugin' import DialogViewPlugin from './components/modals/dialogViewPlugin'
import { AppContext, appProviderContextType, onLineContext, platformContext } from './context/context' import { appProviderContextType, onLineContext, platformContext } from './context/context'
import { FormattedMessage, IntlProvider } from 'react-intl' import { FormattedMessage, IntlProvider } from 'react-intl'
import { CustomTooltip } from '@remix-ui/helper' import { CustomTooltip } from '@remix-ui/helper'
import { UsageTypes } from './types' import { UsageTypes } from './types'
@ -105,7 +105,7 @@ const RemixApp = (props: IRemixAppUi) => {
showMatamo: props.app.showMatamo, showMatamo: props.app.showMatamo,
appManager: props.app.appManager, appManager: props.app.appManager,
showEnter: props.app.showEnter, showEnter: props.app.showEnter,
modal: props.app.notification, modal: props.app.notification
} }
const handleUserChosenType = async (type) => { const handleUserChosenType = async (type) => {

@ -1,7 +1,7 @@
import {CustomTooltip} from '@remix-ui/helper' import {CustomTooltip} from '@remix-ui/helper'
import React, {CSSProperties} from 'react' //eslint-disable-line import React, {CSSProperties} from 'react' //eslint-disable-line
import './remix-ui-checkbox.css' import './remix-ui-checkbox.css'
type Placement = import('react-overlays/usePopper').Placement import {Placement} from 'react-bootstrap/esm/types'
/* eslint-disable-next-line */ /* eslint-disable-next-line */
export interface RemixUiCheckboxProps { export interface RemixUiCheckboxProps {

@ -1,6 +1,6 @@
import React, {useState} from 'react' import React, {useState} from 'react'
import copy from 'copy-to-clipboard' import copy from 'copy-to-clipboard'
import {Placement} from 'react-bootstrap/esm/Overlay' import {Placement} from 'react-bootstrap/esm/types'
import './copy-to-clipboard.css' import './copy-to-clipboard.css'
import {CustomTooltip} from '@remix-ui/helper' import {CustomTooltip} from '@remix-ui/helper'

@ -85,7 +85,11 @@ export const reducerActions = (models = initialState, action: Action) => {
case 'SET_FONTSIZE': { case 'SET_FONTSIZE': {
if (!editor) return models if (!editor) return models
const size = action.payload.size const size = action.payload.size
editor.updateOptions({ fontSize: size }) if (size === 1) {
editor.trigger('keyboard', 'editor.action.fontZoomIn', {});
} else{
editor.trigger('keyboard', 'editor.action.fontZoomOut', {});
}
return models return models
} }
case 'SET_WORDWRAP': { case 'SET_WORDWRAP': {

@ -645,14 +645,6 @@ export const EditorUI = (props: EditorUIProps) => {
} }
}) })
// zoomin zoomout
editor.addCommand(monacoRef.current.KeyMod.CtrlCmd | (monacoRef.current.KeyCode as any).US_EQUAL, () => {
editor.updateOptions({fontSize: editor.getOption(51) + 1})
})
editor.addCommand(monacoRef.current.KeyMod.CtrlCmd | (monacoRef.current.KeyCode as any).US_MINUS, () => {
editor.updateOptions({fontSize: editor.getOption(51) - 1})
})
// add context menu items // add context menu items
const zoominAction = { const zoominAction = {
id: 'zoomIn', id: 'zoomIn',
@ -664,7 +656,7 @@ export const EditorUI = (props: EditorUIProps) => {
monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Equal, monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Equal,
], ],
run: () => { run: () => {
editor.updateOptions({fontSize: editor.getOption(51) + 1}) editor.trigger('keyboard', 'editor.action.fontZoomIn', {});
} }
} }
const zoomOutAction = { const zoomOutAction = {
@ -677,7 +669,7 @@ export const EditorUI = (props: EditorUIProps) => {
monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Minus, monacoRef.current.KeyMod.CtrlCmd | monacoRef.current.KeyCode.Minus,
], ],
run: () => { run: () => {
editor.updateOptions({fontSize: editor.getOption(51) - 1}) editor.trigger('keyboard', 'editor.action.fontZoomOut', {});
} }
} }
const formatAction = { const formatAction = {

@ -22,9 +22,9 @@ const FileDecorationTooltip = (props: {fileDecoration: fileDecoration; icon: JSX
placement="auto" placement="auto"
overlay={ overlay={
<Popover id={`popover-positioned-auto}`}> <Popover id={`popover-positioned-auto}`}>
<Popover.Content id={`error-tooltip-${props.fileDecoration.path}`} style={{minWidth: 'fit-content'}} className={'text-wrap bg-secondary w-100 p-1 m-0'}> <Popover.Body id={`error-tooltip-${props.fileDecoration.path}`} style={{minWidth: 'fit-content'}} className={'text-wrap bg-secondary w-100 p-1 m-0'}>
<pre>{getComments(props.fileDecoration)}</pre> <pre>{getComments(props.fileDecoration)}</pre>
</Popover.Content> </Popover.Body>
</Popover> </Popover>
} }
> >

@ -17,26 +17,25 @@ export function CustomTooltip({ children, placement, tooltipId, tooltipClasses,
<Fragment> <Fragment>
<OverlayTrigger <OverlayTrigger
placement={placement} placement={placement}
overlay={ overlay={<>
<Popover id={`popover-positioned-${placement}`}> <Popover id={`popover-positioned-${placement}`}>
<Popover.Content <Popover.Body
id={!tooltipId ? `${tooltipText}Tooltip` : tooltipId} id={!tooltipId ? `${tooltipText}Tooltip` : tooltipId}
style={{ minWidth: 'fit-content' }} style={{ minWidth: 'fit-content' }}
className={'text-wrap p-1 px-2 bg-secondary w-100' + tooltipClasses} className={'text-wrap p-1 px-2 bg-secondary w-100' + tooltipClasses}
> >
{typeof tooltipText === 'string' ? <span className={'text-wrap p-1 px-2 bg-secondary ' + { tooltipTextClasses }}>{tooltipText}</span> : tooltipText} <>{typeof tooltipText === 'string' ? <span className={'text-wrap p-1 px-2 bg-secondary ' + { tooltipTextClasses }}>{tooltipText}</span> : tooltipText}</>
</Popover.Content> </Popover.Body>
</Popover> </Popover>
} </>}
delay={delay} delay={delay}
> >
{children} <>{children}</>
</OverlayTrigger> </OverlayTrigger>
</Fragment> </Fragment>
) : ( ) : (
<Fragment> <Fragment>
{children} <>{children}</>
</Fragment> </Fragment>
)) ))
) )

@ -1,4 +1,4 @@
import { Placement } from 'react-bootstrap/esm/Overlay' import { Placement } from 'react-bootstrap/esm/types'
import { OverlayDelay, OverlayTriggerRenderProps } from 'react-bootstrap/esm/OverlayTrigger' import { OverlayDelay, OverlayTriggerRenderProps } from 'react-bootstrap/esm/OverlayTrigger'
export type CustomTooltipType = { export type CustomTooltipType = {

@ -82,8 +82,11 @@ function HomeTabFile({ plugin }: HomeTabFileProps) {
deleteSavedWorkspace(deletedName) deleteSavedWorkspace(deletedName)
}) })
return () => { return () => {
plugin.off('filePanel', 'setWorkspace') try {
plugin.off('filePanel', 'workspaceDeleted') plugin.off('filePanel', 'setWorkspace')
plugin.off('filePanel', 'workspaceDeleted')
} catch (e) {
}
} }
}, [plugin]) }, [plugin])

@ -4,7 +4,7 @@ import React, { useContext, useEffect, useState } from 'react'
import {FormattedMessage, useIntl} from 'react-intl' import {FormattedMessage, useIntl} from 'react-intl'
import '../remix-ui-plugin-manager.css' import '../remix-ui-plugin-manager.css'
import {CustomTooltip} from '@remix-ui/helper' import {CustomTooltip} from '@remix-ui/helper'
import { AppContext, onLineContext } from '@remix-ui/app' import { onLineContext } from '@remix-ui/app'
interface PluginCardProps { interface PluginCardProps {
profile: any profile: any
buttonText: string buttonText: string

@ -370,7 +370,9 @@ export function ContractDropdownUI(props: ContractDropdownProps) {
let evmVersion = null let evmVersion = null
try { try {
evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion if (loadedContractData && loadedContractData.metadata) {
evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion
}
} catch (err) {} } catch (err) {}
return ( return (
<div className="udapp_container mb-2" data-id="contractDropdownContainer"> <div className="udapp_container mb-2" data-id="contractDropdownContainer">

@ -6,20 +6,13 @@ import {CustomTooltip, isNumeric} from '@remix-ui/helper'
import {ValueProps} from '../types' import {ValueProps} from '../types'
export function ValueUI(props: ValueProps) { export function ValueUI(props: ValueProps) {
const [sendValue, setSendValue] = useState<string>(props.sendValue) const inputValue = useRef<HTMLInputElement>({} as HTMLInputElement)
const inputValue = useRef<HTMLInputElement>({} as HTMLInputElement)
useEffect(() => { useEffect(() => {
sendValue !== props.sendValue && props.setSendValue(sendValue) if (props.sendValue !== inputValue.current.value) {
}, [sendValue]) inputValue.current.value = props.sendValue
const validateInputKey = (e) => {
// preventing not numeric keys
// preventing 000 case
if (!isNumeric(e.key) || (e.key === '0' && !parseInt(inputValue.current.value) && inputValue.current.value.length > 0)) {
e.preventDefault()
} }
} },[props.sendValue])
const validateValue = (e) => { const validateValue = (e) => {
const value = e.target.value const value = e.target.value
@ -27,22 +20,28 @@ export function ValueUI(props: ValueProps) {
if (!value) { if (!value) {
// assign 0 if given value is // assign 0 if given value is
// - empty // - empty
return setSendValue('0') inputValue.current.value = '0'
props.setSendValue('0')
return
} }
let v let v
try { try {
v = new BN(value, 10) v = new BN(value, 10)
setSendValue(v.toString(10)) props.setSendValue(v.toString(10))
} catch (e) { } catch (e) {
// assign 0 if given value is // assign 0 if given value is
// - not valid (for ex 4345-54) // - not valid (for ex 4345-54)
// - contains only '0's (for ex 0000) copy past or edit // - contains only '0's (for ex 0000) copy past or edit
setSendValue('0') inputValue.current.value = '0'
props.setSendValue('0')
} }
// if giveen value is negative(possible with copy-pasting) set to 0 // if giveen value is negative(possible with copy-pasting) set to 0
if (v.lt(0)) setSendValue('0') if (v.lt(0)) {
inputValue.current.value = '0'
props.setSendValue('0')
}
} }
return ( return (
@ -61,7 +60,6 @@ export function ValueUI(props: ValueProps) {
className="form-control udapp_gasNval udapp_col2" className="form-control udapp_gasNval udapp_col2"
id="value" id="value"
data-id="dandrValue" data-id="dandrValue"
onKeyPress={validateInputKey}
onChange={validateValue} onChange={validateValue}
value={props.sendValue} value={props.sendValue}
/> />

@ -6,7 +6,7 @@ import {Include} from './Include'
import {Exclude} from './Exclude' import {Exclude} from './Exclude'
import {FindContainer} from './FindContainer' import {FindContainer} from './FindContainer'
import {Undo} from './Undo' import {Undo} from './Undo'
import { appPlatformTypes, platformContext } from '@remix-ui/app' import { platformContext } from '@remix-ui/app'

@ -436,10 +436,16 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => {
} }
const isCopilotActivated = props.config.get('settings/copilot/suggest/activate') || false const isCopilotActivated = props.config.get('settings/copilot/suggest/activate') || false
const copilotMaxnewToken = props.config.get('settings/copilot/suggest/max_new_tokens') let copilotMaxnewToken = props.config.get('settings/copilot/suggest/max_new_tokens')
if (!copilotMaxnewToken) props.config.set('settings/copilot/suggest/max_new_tokens', 5) if (!copilotMaxnewToken) {
const copilotTemperatureValue = (props.config.get('settings/copilot/suggest/temperature')) * 100 props.config.set('settings/copilot/suggest/max_new_tokens', 5)
if (!copilotTemperatureValue) props.config.set('settings/copilot/suggest/temperature', 0.5) copilotMaxnewToken = 5
}
let copilotTemperatureValue = (props.config.get('settings/copilot/suggest/temperature')) * 100
if (!copilotTemperatureValue) {
props.config.set('settings/copilot/suggest/temperature', 0.5)
copilotTemperatureValue = 0.5
}
if (isCopilotActivated) props.plugin.call('copilot-suggestion', 'init') if (isCopilotActivated) props.plugin.call('copilot-suggestion', 'init')
const copilotSettings = () => ( const copilotSettings = () => (

@ -1,5 +1,6 @@
import React from 'react' import React from 'react'
import { CompileTabLogic } from '../logic/compileTabLogic' import { CompileTabLogic } from '../logic/compileTabLogic'
export const setEditorMode = (mode: string) => { export const setEditorMode = (mode: string) => {
return { return {
type: 'SET_EDITOR_MODE', type: 'SET_EDITOR_MODE',
@ -28,7 +29,7 @@ export const resetCompilerMode = () => (dispatch: React.Dispatch<any>) => {
export const listenToEvents = (compileTabLogic: CompileTabLogic, api) => (dispatch: React.Dispatch<any>) => { export const listenToEvents = (compileTabLogic: CompileTabLogic, api) => (dispatch: React.Dispatch<any>) => {
api.onSessionSwitched = () => { api.onSessionSwitched = () => {
dispatch(setEditorMode('sessionSwitched')) dispatch(setEditorMode('sessionSwitched_' + Date.now()))
} }
compileTabLogic.event.on('startingCompilation', () => { compileTabLogic.event.on('startingCompilation', () => {
@ -40,7 +41,7 @@ export const listenToEvents = (compileTabLogic: CompileTabLogic, api) => (dispat
}) })
api.onContentChanged = () => { api.onContentChanged = () => {
dispatch(setEditorMode('contentChanged')) dispatch(setEditorMode('contentChanged_' + Date.now()))
} }
compileTabLogic.compiler.event.register('loadingCompiler', () => { compileTabLogic.compiler.event.register('loadingCompiler', () => {
dispatch(setCompilerMode('loadingCompiler')) dispatch(setCompilerMode('loadingCompiler'))

@ -16,6 +16,7 @@ export const CompilerApiMixin = (Base) => class extends Base {
compileErrors: any compileErrors: any
compileTabLogic: CompileTabLogic compileTabLogic: CompileTabLogic
configurationSettings: ConfigurationSettings configurationSettings: ConfigurationSettings
solJsonBinData: iSolJsonBinData
onCurrentFileChanged: (fileName: string) => void onCurrentFileChanged: (fileName: string) => void
// onResetResults: () => void // onResetResults: () => void
@ -281,7 +282,11 @@ export const CompilerApiMixin = (Base) => class extends Base {
this.on('fileManager', 'fileClosed', this.data.eventHandlers.onFileClosed) this.on('fileManager', 'fileClosed', this.data.eventHandlers.onFileClosed)
this.on('compilerloader', 'jsonBinDataLoaded', (urls: iSolJsonBinData) => { this.on('compilerloader', 'jsonBinDataLoaded', (urls: iSolJsonBinData) => {
this.setSolJsonBinData(urls) try{
this.setSolJsonBinData(urls)
}catch(e){
}
this.solJsonBinData = urls
}) })
this.call('compilerloader', 'getJsonBinData') this.call('compilerloader', 'getJsonBinData')

@ -6,7 +6,7 @@ import {ConfigurationSettings} from '@remix-project/remix-lib'
import {checkSpecialChars, CustomTooltip, extractNameFromKey} from '@remix-ui/helper' import {checkSpecialChars, CustomTooltip, extractNameFromKey} from '@remix-ui/helper'
import {canUseWorker, urlFromVersion, pathToURL} from '@remix-project/remix-solidity' import {canUseWorker, urlFromVersion, pathToURL} from '@remix-project/remix-solidity'
import {compilerReducer, compilerInitialState} from './reducers/compiler' import {compilerReducer, compilerInitialState} from './reducers/compiler'
import {resetEditorMode, listenToEvents} from './actions/compiler' import {listenToEvents} from './actions/compiler'
import {getValidLanguage} from '@remix-project/remix-solidity' import {getValidLanguage} from '@remix-project/remix-solidity'
import {CopyToClipboard} from '@remix-ui/clipboard' import {CopyToClipboard} from '@remix-ui/clipboard'
import {configFileContent} from './compilerConfiguration' import {configFileContent} from './compilerConfiguration'
@ -234,16 +234,13 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
useEffect(() => { useEffect(() => {
if (compilerContainer.editor.mode) { if (compilerContainer.editor.mode) {
switch (compilerContainer.editor.mode) { if (compilerContainer.editor.mode.startsWith('sessionSwitched')) {
case 'sessionSwitched':
sessionSwitched() sessionSwitched()
resetEditorMode()(dispatch) return
break } else if (compilerContainer.editor.mode.startsWith('contentChanged')) {
case 'contentChanged':
contentChanged() contentChanged()
resetEditorMode()(dispatch) return
break }
}
} }
}, [compilerContainer.editor.mode]) }, [compilerContainer.editor.mode])

@ -140,7 +140,10 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => {
} }
api.setSolJsonBinData = (data: iSolJsonBinData) => { api.setSolJsonBinData = (data: iSolJsonBinData) => {
setSolJsonBinData(data)
}
const setSolJsonBinData = (data: iSolJsonBinData) => {
const builtin: iSolJsonBinDataBuild = const builtin: iSolJsonBinDataBuild =
{ {
path: 'builtin', path: 'builtin',
@ -245,6 +248,12 @@ export const SolidityCompiler = (props: SolidityCompilerProps) => {
</div> </div>
) )
useEffect(() => {
if(!state.solJsonBinData && api.solJsonBinData){
setSolJsonBinData(api.solJsonBinData)
}
},[])
return ( return (
<> <>
<div id="compileTabView"> <div id="compileTabView">

@ -1,7 +1,7 @@
import React, {Fragment, useCallback, useEffect, useState} from 'react' import React, {Fragment, useCallback, useEffect, useState} from 'react'
import {FormattedMessage} from 'react-intl' import {FormattedMessage} from 'react-intl'
import {TransformComponent, TransformWrapper} from 'react-zoom-pan-pinch' import {TransformComponent, TransformWrapper} from 'react-zoom-pan-pinch'
import {GlassMagnifier, MagnifierContainer} from 'react-image-magnifiers' import {GlassMagnifier, MagnifierContainer} from '@ricarso/react-image-magnifiers'
import {ThemeSummary} from '../types' import {ThemeSummary} from '../types'
import UmlDownload from './components/UmlDownload' import UmlDownload from './components/UmlDownload'
import './css/solidity-uml-gen.css' import './css/solidity-uml-gen.css'

@ -5,10 +5,10 @@ import './tooltip-popup.module.css'
const popover = (title?: string, content?: string | React.ReactNode) => ( const popover = (title?: string, content?: string | React.ReactNode) => (
<Popover id="popover-basic" className="bg-danger border-danger"> <Popover id="popover-basic" className="bg-danger border-danger">
<Popover.Title as="h3" className="bg-warning border-0"> <Popover.Header as="h3" className="bg-warning border-0">
{title || 'Tooltip'} {title || 'Tooltip'}
</Popover.Title> </Popover.Header>
<Popover.Content className="bg-danger border-info">{content}</Popover.Content> <Popover.Body className="bg-danger border-info">{content}</Popover.Body>
</Popover> </Popover>
) )

@ -7,8 +7,6 @@ import {customAction} from '@remixproject/plugin-api'
import UploadFile from './upload-file' import UploadFile from './upload-file'
import { appPlatformTypes, platformContext } from '@remix-ui/app' import { appPlatformTypes, platformContext } from '@remix-ui/app'
declare global { declare global {
interface Window { interface Window {
_paq: any _paq: any

@ -1,7 +1,7 @@
import {CustomTooltip} from '@remix-ui/helper' import {CustomTooltip} from '@remix-ui/helper'
import React, {useState, useEffect, useContext} from 'react' //eslint-disable-line import React, {useState, useEffect, useContext} from 'react' //eslint-disable-line
import {FormattedMessage} from 'react-intl' import {FormattedMessage} from 'react-intl'
import {Placement} from 'react-bootstrap/esm/Overlay' import {Placement} from 'react-bootstrap/esm/types'
import {FileExplorerMenuProps} from '../types' import {FileExplorerMenuProps} from '../types'
import { FileSystemContext } from '../contexts' import { FileSystemContext } from '../contexts'
const _paq = (window._paq = window._paq || []) const _paq = (window._paq = window._paq || [])

@ -2,8 +2,7 @@ import React, { useContext } from 'react'
import {CustomTooltip, CustomMenu, CustomIconsToggle} from '@remix-ui/helper' import {CustomTooltip, CustomMenu, CustomIconsToggle} from '@remix-ui/helper'
import {Dropdown, NavDropdown} from 'react-bootstrap' import {Dropdown, NavDropdown} from 'react-bootstrap'
import {FormattedMessage} from 'react-intl' import {FormattedMessage} from 'react-intl'
import { AppContext, appPlatformTypes, platformContext } from '@remix-ui/app' import { appPlatformTypes, platformContext } from '@remix-ui/app'
const _paq = (window._paq = window._paq || []) const _paq = (window._paq = window._paq || [])
export interface HamburgerMenuItemProps { export interface HamburgerMenuItemProps {
@ -79,7 +78,7 @@ export interface HamburgerSubMenuItemProps {
export function HamburgerSubMenuItem(props: HamburgerSubMenuItemProps) { export function HamburgerSubMenuItem(props: HamburgerSubMenuItemProps) {
return ( return (
<> <>
<NavDropdown title={props.title} as={CustomMenu} key={props.id} id={props.id} drop="right"> <NavDropdown title={props.title} as={CustomMenu} key={props.id} id={props.id} drop={'end'}>
{props.subMenus.map((item) => ( {props.subMenus.map((item) => (
<NavHamburgerMenuItem platforms={props.platforms} kind={item.kind} fa={item.fa} hideOption={item.hideOption} actionOnClick={item.actionOnClick} /> <NavHamburgerMenuItem platforms={props.platforms} kind={item.kind} fa={item.fa} hideOption={item.hideOption} actionOnClick={item.actionOnClick} />
))} ))}

@ -93,7 +93,11 @@ export const FileSystemProvider = (props: WorkspaceProps) => {
} }
const dispatchFetchWorkspaceDirectory = async (path: string) => { const dispatchFetchWorkspaceDirectory = async (path: string) => {
await fetchWorkspaceDirectory(path) try {
await fetchWorkspaceDirectory(path)
} catch (err) {
console.error(err)
}
} }
const dispatchSwitchToWorkspace = async (name: string) => { const dispatchSwitchToWorkspace = async (name: string) => {

@ -5,6 +5,7 @@ import { fileDecoration } from '@remix-ui/file-decorators'
import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types' import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types'
import { ViewPlugin } from '@remixproject/engine-web' import { ViewPlugin } from '@remixproject/engine-web'
import { appPlatformTypes } from '@remix-ui/app' import { appPlatformTypes } from '@remix-ui/app'
import { Placement } from 'react-bootstrap/esm/types'
export type action = { name: string, type?: Array<WorkspaceElement>, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes } export type action = { name: string, type?: Array<WorkspaceElement>, path?: string[], extension?: string[], pattern?: string[], id: string, multiselect: boolean, label: string, sticky?: boolean, group: number, platform?: appPlatformTypes }
export interface JSONStandardInput { export interface JSONStandardInput {
@ -129,7 +130,7 @@ export interface FileExplorerProps {
handleNewFolderInput: (parentFolder?: string) => Promise<void> handleNewFolderInput: (parentFolder?: string) => Promise<void>
dragStatus: (status: boolean) => void dragStatus: (status: boolean) => void
} }
type Placement = import('react-overlays/usePopper').Placement
export interface FileExplorerMenuProps { export interface FileExplorerMenuProps {
title: string title: string
menuItems: string[] menuItems: string[]

@ -184,7 +184,7 @@ export class RemixURLResolver {
} }
const npm_urls = ["https://cdn.jsdelivr.net/npm/", "https://unpkg.com/"] const npm_urls = ["https://cdn.jsdelivr.net/npm/", "https://unpkg.com/"]
process && process.env && process.env['NPM_URL'] && npm_urls.unshift(process.env['NPM_URL']) process && process.env && process.env['NX_NPM_URL'] && npm_urls.unshift(process.env['NX_NPM_URL'])
let content = null let content = null
// get response from all urls // get response from all urls
for (let i = 0; i < npm_urls.length; i++) { for (let i = 0; i < npm_urls.length; i++) {

@ -143,6 +143,7 @@
"@remixproject/plugin-utils": "0.3.42", "@remixproject/plugin-utils": "0.3.42",
"@remixproject/plugin-webview": "0.3.42", "@remixproject/plugin-webview": "0.3.42",
"@remixproject/plugin-ws": "0.3.42", "@remixproject/plugin-ws": "0.3.42",
"@ricarso/react-image-magnifiers": "^1.9.0",
"@types/nightwatch": "^2.3.1", "@types/nightwatch": "^2.3.1",
"@web3modal/ethereum": "^2.7.1", "@web3modal/ethereum": "^2.7.1",
"@web3modal/react": "^2.6.2", "@web3modal/react": "^2.6.2",
@ -175,7 +176,7 @@
"file-path-filter": "^3.0.2", "file-path-filter": "^3.0.2",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"formik": "^2.2.9", "formik": "^2.4.5",
"from-exponential": "1.1.1", "from-exponential": "1.1.1",
"fs-extra": "^3.0.1", "fs-extra": "^3.0.1",
"ganache": "^7.9.1", "ganache": "^7.9.1",
@ -197,19 +198,18 @@
"prettier": "^2.8.4", "prettier": "^2.8.4",
"prettier-plugin-solidity": "^1.0.0-beta.24", "prettier-plugin-solidity": "^1.0.0-beta.24",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"react": "^17.0.2", "react": "^18.2.0",
"react-beautiful-dnd": "^13.1.0", "react-beautiful-dnd": "^13.1.0",
"react-bootstrap": "^1.6.4", "react-bootstrap": "^2.9.0",
"react-dom": "^17.0.2", "react-dom": "^18.2.0",
"react-draggable": "^4.4.4", "react-draggable": "^4.4.4",
"react-image-magnifiers": "^1.4.0",
"react-intl": "^6.0.4", "react-intl": "^6.0.4",
"react-json-view": "^1.21.3", "react-json-view": "^1.21.3",
"react-markdown": "^8.0.5", "react-markdown": "^8.0.5",
"react-multi-carousel": "^2.8.2", "react-multi-carousel": "^2.8.2",
"react-router-dom": "^6.3.0", "react-router-dom": "^6.16.0",
"react-tabs": "^3.2.2", "react-tabs": "^6.0.2",
"react-zoom-pan-pinch": "^3.0.2", "react-zoom-pan-pinch": "^3.1.0",
"regenerator-runtime": "0.13.7", "regenerator-runtime": "0.13.7",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",
"rlp": "^3.0.0", "rlp": "^3.0.0",
@ -248,7 +248,7 @@
"@babel/register": "^7.4.4", "@babel/register": "^7.4.4",
"@electron-forge/cli": "^6.1.1", "@electron-forge/cli": "^6.1.1",
"@fortawesome/fontawesome-free": "^5.8.1", "@fortawesome/fontawesome-free": "^5.8.1",
"@monaco-editor/react": "4.5.1", "@monaco-editor/react": "4.6.0",
"@nrwl/cli": "15.7.1", "@nrwl/cli": "15.7.1",
"@nrwl/eslint-plugin-nx": "15.7.1", "@nrwl/eslint-plugin-nx": "15.7.1",
"@nrwl/js": "15.7.1", "@nrwl/js": "15.7.1",
@ -271,11 +271,11 @@
"@types/lodash": "^4.14.172", "@types/lodash": "^4.14.172",
"@types/mocha": "^9.1.1", "@types/mocha": "^9.1.1",
"@types/node": "18.16.1", "@types/node": "18.16.1",
"@types/react": "^17.0.24", "@types/react": "^18.2.0",
"@types/react-beautiful-dnd": "^13.1.2", "@types/react-beautiful-dnd": "^13.1.2",
"@types/react-dom": "^17.0.9", "@types/react-dom": "^18.2.0",
"@types/react-image-magnifiers": "^1.3.2", "@types/react-image-magnifiers": "^1.3.2",
"@types/react-router-dom": "^5.3.0", "@types/react-router-dom": "^5.3.3",
"@types/request": "^2.48.7", "@types/request": "^2.48.7",
"@types/semver": "^7.3.10", "@types/semver": "^7.3.10",
"@types/tape": "^4.13.0", "@types/tape": "^4.13.0",
@ -348,7 +348,7 @@
"minixhr": "^4.0.0", "minixhr": "^4.0.0",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mocha": "^8.0.1", "mocha": "^8.0.1",
"monaco-editor": "0.41.0", "monaco-editor": "0.44.0",
"nanohtml": "^1.6.3", "nanohtml": "^1.6.3",
"nightwatch": "^2.3", "nightwatch": "^2.3",
"nodemon": "^2.0.4", "nodemon": "^2.0.4",
@ -362,7 +362,6 @@
"os-browserify": "^0.3.0", "os-browserify": "^0.3.0",
"process": "^0.11.10", "process": "^0.11.10",
"react-refresh": "^0.14.0", "react-refresh": "^0.14.0",
"react-test-renderer": "^17.0.2",
"request": "^2.83.0", "request": "^2.83.0",
"rimraf": "^2.6.1", "rimraf": "^2.6.1",
"selenium-standalone": "^9.0.3", "selenium-standalone": "^9.0.3",
@ -387,6 +386,6 @@
"webpack-cli": "^4.10.0" "webpack-cli": "^4.10.0"
}, },
"resolutions": { "resolutions": {
"@types/react": "^17.0.24" "@types/react": "^18.2.0"
} }
} }

@ -1649,7 +1649,7 @@
core-js-pure "^3.19.0" core-js-pure "^3.19.0"
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.16.3" version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
@ -1677,12 +1677,12 @@
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.7.6": "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5":
version "7.18.9" version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d"
integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.14.0"
"@babel/template@^7.15.4", "@babel/template@^7.20.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": "@babel/template@^7.15.4", "@babel/template@^7.20.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0":
version "7.20.7" version "7.20.7"
@ -4025,19 +4025,19 @@
semver "^7.3.8" semver "^7.3.8"
superstruct "^1.0.3" superstruct "^1.0.3"
"@monaco-editor/loader@^1.3.3": "@monaco-editor/loader@^1.4.0":
version "1.3.3" version "1.4.0"
resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.3.tgz#7f1742bd3cc21c0362a46a4056317f6e5215cfca" resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558"
integrity sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q== integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==
dependencies: dependencies:
state-local "^1.0.6" state-local "^1.0.6"
"@monaco-editor/react@4.5.1": "@monaco-editor/react@4.6.0":
version "4.5.1" version "4.6.0"
resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119"
integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw==
dependencies: dependencies:
"@monaco-editor/loader" "^1.3.3" "@monaco-editor/loader" "^1.4.0"
"@motionone/animation@^10.15.1": "@motionone/animation@^10.15.1":
version "10.15.1" version "10.15.1"
@ -4893,10 +4893,10 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
"@popperjs/core@^2.8.6": "@popperjs/core@^2.11.6":
version "2.10.2" version "2.11.8"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ== integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2" version "1.1.2"
@ -4964,6 +4964,18 @@
unbzip2-stream "1.4.3" unbzip2-stream "1.4.3"
yargs "17.7.1" yargs "17.7.1"
"@react-aria/ssr@^3.5.0":
version "3.9.0"
resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c"
integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==
dependencies:
"@swc/helpers" "^0.5.0"
"@remix-run/router@1.14.0":
version "1.14.0"
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.0.tgz#9bc39a5a3a71b81bdb310eba6def5bc3966695b7"
integrity sha512-WOHih+ClN7N8oHk9N4JUiMxQJmRVaOxcg8w7F/oHUXzJt920ekASLI/7cYX8XkntDWRhLZtsk6LbGrkgOAvi5A==
"@remixproject/engine-electron@0.3.42": "@remixproject/engine-electron@0.3.42":
version "0.3.42" version "0.3.42"
resolved "https://registry.yarnpkg.com/@remixproject/engine-electron/-/engine-electron-0.3.42.tgz#12328f762f3a2969a55abda58c9f3307143bb03b" resolved "https://registry.yarnpkg.com/@remixproject/engine-electron/-/engine-electron-0.3.42.tgz#12328f762f3a2969a55abda58c9f3307143bb03b"
@ -5042,17 +5054,36 @@
"@remixproject/plugin-utils" "0.3.42" "@remixproject/plugin-utils" "0.3.42"
events "3.2.0" events "3.2.0"
"@restart/context@^2.1.4": "@restart/hooks@^0.4.9":
version "2.1.4" version "0.4.15"
resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.15.tgz#70990085c9b79d1f3e140db824b29218bdc2b5bb"
integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== integrity sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw==
dependencies:
dequal "^2.0.3"
"@restart/hooks@^0.3.26": "@restart/ui@^1.6.6":
version "0.3.27" version "1.6.6"
resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.27.tgz#91f356d66d4699a8cd8b3d008402708b6a9dc505" resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800"
integrity sha512-s984xV/EapUIfkjlf8wz9weP2O9TNKR96C68FfMEy2bE69+H4cNv3RD4Mf97lW7Htt7PjZrYTjSC8f3SB9VCXw== integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==
dependencies: dependencies:
dequal "^2.0.2" "@babel/runtime" "^7.21.0"
"@popperjs/core" "^2.11.6"
"@react-aria/ssr" "^3.5.0"
"@restart/hooks" "^0.4.9"
"@types/warning" "^3.0.0"
dequal "^2.0.3"
dom-helpers "^5.2.0"
uncontrollable "^8.0.1"
warning "^4.0.3"
"@ricarso/react-image-magnifiers@^1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@ricarso/react-image-magnifiers/-/react-image-magnifiers-1.9.0.tgz#c743620a05acc6c288797dac93e91f229ada9cb0"
integrity sha512-2s+xbcRQMcTu5d5WRNCjveeOoiSUl8Qc6rGgZ2P5HTlyHzBsI/uCHQD3UWg0i3o2CaEV/veAHE/kMYyu216pzQ==
dependencies:
prop-types "^15.7.2"
react-input-position "^1.3.1"
typescript "^4.8.4"
"@rollup/plugin-babel@^5.3.0": "@rollup/plugin-babel@^5.3.0":
version "5.3.1" version "5.3.1"
@ -5566,6 +5597,13 @@
"@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-jsx" "^6.5.1"
"@svgr/plugin-svgo" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1"
"@swc/helpers@^0.5.0":
version "0.5.3"
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f"
integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==
dependencies:
tslib "^2.4.0"
"@szmarczak/http-timer@^1.1.2": "@szmarczak/http-timer@^1.1.2":
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
@ -5930,11 +5968,6 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/invariant@^2.2.33":
version "2.2.35"
resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be"
integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==
"@types/isomorphic-git__lightning-fs@^4.4.2": "@types/isomorphic-git__lightning-fs@^4.4.2":
version "4.4.2" version "4.4.2"
resolved "https://registry.yarnpkg.com/@types/isomorphic-git__lightning-fs/-/isomorphic-git__lightning-fs-4.4.2.tgz#aead17cb1ab1a965b69a5247a7d4087336ad5df7" resolved "https://registry.yarnpkg.com/@types/isomorphic-git__lightning-fs/-/isomorphic-git__lightning-fs-4.4.2.tgz#aead17cb1ab1a965b69a5247a7d4087336ad5df7"
@ -6093,7 +6126,7 @@
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0"
integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==
"@types/prop-types@*", "@types/prop-types@^15.7.3": "@types/prop-types@*":
version "15.7.4" version "15.7.4"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
@ -6125,13 +6158,6 @@
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react-dom@^17.0.9":
version "17.0.20"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.20.tgz#e0c8901469d732b36d8473b40b679ad899da1b53"
integrity sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==
dependencies:
"@types/react" "^17"
"@types/react-dom@^18.0.0": "@types/react-dom@^18.0.0":
version "18.0.7" version "18.0.7"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.7.tgz#ee7cf8ec4e6977e3f0a7b1d38bd89c75aa2aec28" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.7.tgz#ee7cf8ec4e6977e3f0a7b1d38bd89c75aa2aec28"
@ -6139,6 +6165,13 @@
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react-dom@^18.2.0":
version "18.2.18"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd"
integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==
dependencies:
"@types/react" "*"
"@types/react-image-magnifiers@^1.3.2": "@types/react-image-magnifiers@^1.3.2":
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/react-image-magnifiers/-/react-image-magnifiers-1.3.2.tgz#7c8f08105ee72b7a306d0d068916a9d53a49e3f9" resolved "https://registry.yarnpkg.com/@types/react-image-magnifiers/-/react-image-magnifiers-1.3.2.tgz#7c8f08105ee72b7a306d0d068916a9d53a49e3f9"
@ -6156,7 +6189,7 @@
hoist-non-react-statics "^3.3.0" hoist-non-react-statics "^3.3.0"
redux "^4.0.0" redux "^4.0.0"
"@types/react-router-dom@^5.3.0": "@types/react-router-dom@^5.3.3":
version "5.3.3" version "5.3.3"
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83"
integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==
@ -6173,17 +6206,17 @@
"@types/history" "*" "@types/history" "*"
"@types/react" "*" "@types/react" "*"
"@types/react-transition-group@^4.4.1": "@types/react-transition-group@^4.4.6":
version "4.4.4" version "4.4.10"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac"
integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.14.8", "@types/react@>=16.9.11", "@types/react@^17", "@types/react@^17.0.24": "@types/react@*", "@types/react@16 || 17 || 18", "@types/react@>=16.9.11", "@types/react@^18.2.0":
version "17.0.52" version "18.2.45"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.52.tgz#10d8b907b5c563ac014a541f289ae8eaa9bf2e9b" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c"
integrity sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A== integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==
dependencies: dependencies:
"@types/prop-types" "*" "@types/prop-types" "*"
"@types/scheduler" "*" "@types/scheduler" "*"
@ -10287,10 +10320,10 @@ classic-level@^1.2.0:
napi-macros "^2.2.2" napi-macros "^2.2.2"
node-gyp-build "^4.3.0" node-gyp-build "^4.3.0"
classnames@^2.3.1: classnames@^2.3.2:
version "2.3.1" version "2.3.2"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
clean-git-ref@^2.0.1: clean-git-ref@^2.0.1:
version "2.0.1" version "2.0.1"
@ -10491,6 +10524,11 @@ clsx@^1.1.0, clsx@^1.1.1:
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
clsx@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
cmd-shim@~2.0.2: cmd-shim@~2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb"
@ -12023,16 +12061,11 @@ deps-sort@^2.0.0, deps-sort@^2.0.1:
subarg "^1.0.0" subarg "^1.0.0"
through2 "^2.0.0" through2 "^2.0.0"
dequal@^2.0.0: dequal@^2.0.0, dequal@^2.0.3:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
dequal@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d"
integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==
des.js@^1.0.0: des.js@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
@ -14442,18 +14475,19 @@ form-data@~2.3.2:
combined-stream "^1.0.6" combined-stream "^1.0.6"
mime-types "^2.1.12" mime-types "^2.1.12"
formik@^2.2.9: formik@^2.4.5:
version "2.2.9" version "2.4.5"
resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.5.tgz#f899b5b7a6f103a8fabb679823e8fafc7e0ee1b4"
integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== integrity sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==
dependencies: dependencies:
"@types/hoist-non-react-statics" "^3.3.1"
deepmerge "^2.1.1" deepmerge "^2.1.1"
hoist-non-react-statics "^3.3.0" hoist-non-react-statics "^3.3.0"
lodash "^4.17.21" lodash "^4.17.21"
lodash-es "^4.17.21" lodash-es "^4.17.21"
react-fast-compare "^2.0.1" react-fast-compare "^2.0.1"
tiny-warning "^1.0.2" tiny-warning "^1.0.2"
tslib "^1.10.0" tslib "^2.0.0"
forwarded@0.2.0: forwarded@0.2.0:
version "0.2.0" version "0.2.0"
@ -15778,13 +15812,6 @@ hey-listen@^1.0.8:
resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68"
integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==
history@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b"
integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==
dependencies:
"@babel/runtime" "^7.7.6"
hmac-drbg@^1.0.1: hmac-drbg@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@ -20488,10 +20515,10 @@ mold-source-map@~0.4.0:
convert-source-map "^1.1.0" convert-source-map "^1.1.0"
through "~2.2.7" through "~2.2.7"
monaco-editor@0.41.0: monaco-editor@0.44.0:
version "0.41.0" version "0.44.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.41.0.tgz#2ba31e5af7e3ae93ac5d7467ec2772ef9b3d967f" resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.44.0.tgz#3c0fe3655923bbf7dd647057302070b5095b6c59"
integrity sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA== integrity sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==
motion@10.16.2: motion@10.16.2:
version "10.16.2" version "10.16.2"
@ -23823,37 +23850,31 @@ react-beautiful-dnd@^13.1.0:
redux "^4.0.4" redux "^4.0.4"
use-memo-one "^1.1.1" use-memo-one "^1.1.1"
react-bootstrap@^1.6.4: react-bootstrap@^2.9.0:
version "1.6.4" version "2.9.1"
resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.6.4.tgz#94d5d2422e26bba277656d3529128e14f838b7ca" resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2"
integrity sha512-z3BhBD4bEZuLP8VrYqAD7OT7axdcSkkyvWBWnS2U/4MhyabUihrUyucPWkan7aMI1XIHbmH4LCpEtzWGfx/yfA== integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA==
dependencies: dependencies:
"@babel/runtime" "^7.14.0" "@babel/runtime" "^7.22.5"
"@restart/context" "^2.1.4" "@restart/hooks" "^0.4.9"
"@restart/hooks" "^0.3.26" "@restart/ui" "^1.6.6"
"@types/invariant" "^2.2.33" "@types/react-transition-group" "^4.4.6"
"@types/prop-types" "^15.7.3" classnames "^2.3.2"
"@types/react" ">=16.14.8"
"@types/react-transition-group" "^4.4.1"
"@types/warning" "^3.0.0"
classnames "^2.3.1"
dom-helpers "^5.2.1" dom-helpers "^5.2.1"
invariant "^2.2.4" invariant "^2.2.4"
prop-types "^15.7.2" prop-types "^15.8.1"
prop-types-extra "^1.1.0" prop-types-extra "^1.1.0"
react-overlays "^5.1.1" react-transition-group "^4.4.5"
react-transition-group "^4.4.1"
uncontrollable "^7.2.1" uncontrollable "^7.2.1"
warning "^4.0.3" warning "^4.0.3"
react-dom@^17.0.2: react-dom@^18.2.0:
version "17.0.2" version "18.2.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" scheduler "^0.23.0"
scheduler "^0.20.2"
react-draggable@^4.4.4: react-draggable@^4.4.4:
version "4.4.5" version "4.4.5"
@ -23868,14 +23889,6 @@ react-fast-compare@^2.0.1:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
react-image-magnifiers@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/react-image-magnifiers/-/react-image-magnifiers-1.4.0.tgz#0472e93491d5a199a278d4efc855f03542214601"
integrity sha512-ZszHusdsYteccKGysHXUOgLRGtHqfRYuG1koHh3VAvuhrzF4BEs1Ot5tSe1WA2v+EsjAEfYcrRyi/Is4QDD61A==
dependencies:
prop-types "^15.7.2"
react-input-position "^1.3.1"
react-input-position@^1.3.1: react-input-position@^1.3.1:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/react-input-position/-/react-input-position-1.3.2.tgz#4e1f3b671eb41c0bd9f232846b94328263a7b65b" resolved "https://registry.yarnpkg.com/react-input-position/-/react-input-position-1.3.2.tgz#4e1f3b671eb41c0bd9f232846b94328263a7b65b"
@ -23899,11 +23912,6 @@ react-intl@^6.0.4:
intl-messageformat "10.1.0" intl-messageformat "10.1.0"
tslib "2.4.0" tslib "2.4.0"
"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1: react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1" version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@ -23914,6 +23922,11 @@ react-is@^17.0.1, react-is@^17.0.2:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
react-json-view@^1.21.3: react-json-view@^1.21.3:
version "1.21.3" version "1.21.3"
resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475"
@ -23955,20 +23968,6 @@ react-multi-carousel@^2.8.2:
resolved "https://registry.yarnpkg.com/react-multi-carousel/-/react-multi-carousel-2.8.2.tgz#4bbd7a9656d8e49e081745331593e5500eefdbe4" resolved "https://registry.yarnpkg.com/react-multi-carousel/-/react-multi-carousel-2.8.2.tgz#4bbd7a9656d8e49e081745331593e5500eefdbe4"
integrity sha512-M9Y7DfAp8bA/r6yexttU6RLA7uyppje4c0ELRuCHZWswH+u7nr0uVP6qHNPjc4XGOEY1MYFOb5nBg7JvoKutuQ== integrity sha512-M9Y7DfAp8bA/r6yexttU6RLA7uyppje4c0ELRuCHZWswH+u7nr0uVP6qHNPjc4XGOEY1MYFOb5nBg7JvoKutuQ==
react-overlays@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.1.1.tgz#2e7cf49744b56537c7828ccb94cfc63dd778ae4f"
integrity sha512-eCN2s2/+GVZzpnId4XVWtvDPYYBD2EtOGP74hE+8yDskPzFy9+pV1H3ZZihxuRdEbQzzacySaaDkR7xE0ydl4Q==
dependencies:
"@babel/runtime" "^7.13.8"
"@popperjs/core" "^2.8.6"
"@restart/hooks" "^0.3.26"
"@types/warning" "^3.0.0"
dom-helpers "^5.2.0"
prop-types "^15.7.2"
uncontrollable "^7.2.1"
warning "^4.0.3"
react-property@2.0.0: react-property@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136" resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136"
@ -23991,47 +23990,29 @@ react-refresh@^0.14.0:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e"
integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==
react-router-dom@^6.3.0: react-router-dom@^6.16.0:
version "6.3.0" version "6.21.0"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.0.tgz#aa4c6bc046a8e8723095bc09b3c0ab2254532712"
integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== integrity sha512-1dUdVj3cwc1npzJaf23gulB562ESNvxf7E4x8upNJycqyUm5BRRZ6dd3LrlzhtLaMrwOCO8R0zoiYxdaJx4LlQ==
dependencies: dependencies:
history "^5.2.0" "@remix-run/router" "1.14.0"
react-router "6.3.0" react-router "6.21.0"
react-router@6.3.0: react-router@6.21.0:
version "6.3.0" version "6.21.0"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.21.0.tgz#6fe3e59877aca3dccceec1801d26991ddf42d12b"
integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== integrity sha512-hGZ0HXbwz3zw52pLZV3j3+ec+m/PQ9cTpBvqjFQmy2XVUWGn5MD+31oXHb6dVTxYzmAeaiUBYjkoNz66n3RGCg==
dependencies: dependencies:
history "^5.2.0" "@remix-run/router" "1.14.0"
react-shallow-renderer@^16.13.1: react-tabs@^6.0.2:
version "16.15.0" version "6.0.2"
resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-6.0.2.tgz#bc1065c3828561fee285a8fd045f22e0fcdde1eb"
integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== integrity sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==
dependencies:
object-assign "^4.1.1"
react-is "^16.12.0 || ^17.0.0 || ^18.0.0"
react-tabs@^3.2.2:
version "3.2.3"
resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.3.tgz#ccbb3e1241ad3f601047305c75db661239977f2f"
integrity sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==
dependencies: dependencies:
clsx "^1.1.0" clsx "^2.0.0"
prop-types "^15.5.0" prop-types "^15.5.0"
react-test-renderer@^17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c"
integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==
dependencies:
object-assign "^4.1.1"
react-is "^17.0.2"
react-shallow-renderer "^16.13.1"
scheduler "^0.20.2"
react-textarea-autosize@^8.3.2: react-textarea-autosize@^8.3.2:
version "8.3.4" version "8.3.4"
resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524"
@ -24041,28 +24022,27 @@ react-textarea-autosize@^8.3.2:
use-composed-ref "^1.3.0" use-composed-ref "^1.3.0"
use-latest "^1.2.1" use-latest "^1.2.1"
react-transition-group@^4.4.1: react-transition-group@^4.4.5:
version "4.4.2" version "4.4.5"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
dependencies: dependencies:
"@babel/runtime" "^7.5.5" "@babel/runtime" "^7.5.5"
dom-helpers "^5.0.1" dom-helpers "^5.0.1"
loose-envify "^1.4.0" loose-envify "^1.4.0"
prop-types "^15.6.2" prop-types "^15.6.2"
react-zoom-pan-pinch@^3.0.2: react-zoom-pan-pinch@^3.1.0:
version "3.0.2" version "3.3.0"
resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.0.2.tgz#706c67e875e9a30480cdbef8dd4e3d6fdac9921c" resolved "https://registry.yarnpkg.com/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.3.0.tgz#873648438c5244d89fcc2127614046928429cbe0"
integrity sha512-c8BxPl/zK6RiOYrV/xBQ+ebgZpsMvbz6WOoqv2P/1QWxGCk1+q3xWF+5ub4QYasv4W8+J6vSelOR8H0WCEbL4w== integrity sha512-vy1h8aenDzXye+HRqANZaSA8IPHoqOiuDPFBkswoyPUH8uMfsmbeH6gFI4r4BhEJa0xIlcA+FbvhidRWKGUrOg==
react@^17.0.2: react@^18.2.0:
version "17.0.2" version "18.2.0"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1"
read-cache@^1.0.0: read-cache@^1.0.0:
version "1.0.0" version "1.0.0"
@ -24432,6 +24412,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
regenerator-runtime@^0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
regenerator-transform@^0.10.0: regenerator-transform@^0.10.0:
version "0.10.1" version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
@ -25262,13 +25247,12 @@ sax@>=0.6.0, sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.20.2: scheduler@^0.23.0:
version "0.20.2" version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1"
schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
version "3.1.1" version "3.1.1"
@ -27899,6 +27883,11 @@ uncontrollable@^7.2.1:
invariant "^2.2.4" invariant "^2.2.4"
react-lifecycles-compat "^3.0.4" react-lifecycles-compat "^3.0.4"
uncontrollable@^8.0.1:
version "8.0.4"
resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6"
integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==
undeclared-identifiers@^1.1.2: undeclared-identifiers@^1.1.2:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"

Loading…
Cancel
Save