Merge branch 'master' of https://github.com/ethereum/remix-project into desktop-master

pull/5200/head
bunsenstraat 2 months ago
commit effca80947
  1. 2
      .github/workflows/pr-reminder.yml
  2. 4
      apps/remix-ide-e2e/src/githttpbackend/package.json
  3. 105
      apps/remix-ide-e2e/src/githttpbackend/yarn.lock
  4. 7
      apps/remix-ide/src/app/components/vertical-icons.tsx
  5. 37
      apps/remix-ide/src/app/panels/layout.ts
  6. 20
      apps/remix-ide/src/app/plugins/templates-selection/templates-selection-plugin.tsx
  7. 96
      apps/remix-ide/src/app/plugins/templates-selection/templates.ts
  8. 4
      apps/remix-ide/src/app/tabs/locales/en/filePanel.json
  9. 7
      apps/remix-ide/src/remixAppManager.js
  10. 2
      apps/remixdesktop/package.json
  11. 98
      apps/remixdesktop/yarn.lock
  12. 8
      libs/ghaction-helper/package.json
  13. 8
      libs/remix-analyzer/package.json
  14. 6
      libs/remix-astwalker/package.json
  15. 12
      libs/remix-debug/package.json
  16. 4
      libs/remix-lib/package.json
  17. 6
      libs/remix-simulator/package.json
  18. 6
      libs/remix-solidity/package.json
  19. 10
      libs/remix-tests/package.json
  20. 43
      libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx
  21. 16
      libs/remix-ui/app/src/lib/remix-app/remix-app.tsx
  22. 2
      libs/remix-ui/git/src/lib/gitactions.ts
  23. 2
      libs/remix-ui/grid-view/src/lib/remix-ui-grid-cell.tsx
  24. 3
      libs/remix-ui/grid-view/src/lib/remix-ui-grid-section.tsx
  25. 44
      libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx
  26. 30
      libs/remix-ui/workspace/src/lib/utils/constants.ts
  27. 4
      libs/remix-url-resolver/package.json
  28. 4
      libs/remix-ws-templates/package.json
  29. 2
      libs/remixd/package.json
  30. 2
      package.json
  31. 6
      yarn.lock

@ -14,4 +14,4 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
freeze-date: '2024-09-09T18:00:00Z'
freeze-date: '2024-10-07T18:00:00Z'

@ -3,9 +3,9 @@
"start:server": "tsc && node ./dist/server.js"
},
"dependencies": {
"body-parser": "^1.20.2",
"body-parser": "^1.20.3",
"child_process": "^1.0.2",
"express": "^4.19.2",
"express": "^4.20.0",
"git-http-backend": "^1.1.2",
"path": "^0.12.7",
"zlib": "^1.0.5"

@ -22,10 +22,10 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
body-parser@1.20.2, body-parser@^1.20.2:
version "1.20.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
body-parser@1.20.3, body-parser@^1.20.2:
version "1.20.3"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
@ -35,7 +35,25 @@ body-parser@1.20.2, body-parser@^1.20.2:
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.11.0"
qs "6.13.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
body-parser@^1.20.3:
version "1.20.3"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.13.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
@ -119,6 +137,11 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
encodeurl@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
es-define-property@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
@ -141,37 +164,37 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
express@^4.19.2:
version "4.19.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
express@^4.20.0:
version "4.20.0"
resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48"
integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
body-parser "1.20.2"
body-parser "1.20.3"
content-disposition "0.5.4"
content-type "~1.0.4"
cookie "0.6.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
encodeurl "~1.0.2"
encodeurl "~2.0.0"
escape-html "~1.0.3"
etag "~1.8.1"
finalhandler "1.2.0"
fresh "0.5.2"
http-errors "2.0.0"
merge-descriptors "1.0.1"
merge-descriptors "1.0.3"
methods "~1.1.2"
on-finished "2.4.1"
parseurl "~1.3.3"
path-to-regexp "0.1.7"
path-to-regexp "0.1.10"
proxy-addr "~2.0.7"
qs "6.11.0"
range-parser "~1.2.1"
safe-buffer "5.2.1"
send "0.18.0"
serve-static "1.15.0"
send "0.19.0"
serve-static "1.16.0"
setprototypeof "1.2.0"
statuses "2.0.1"
type-is "~1.6.18"
@ -299,10 +322,10 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
merge-descriptors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
methods@~1.1.2:
version "1.1.2"
@ -358,10 +381,10 @@ parseurl@~1.3.3:
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
path-to-regexp@0.1.10:
version "0.1.10"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b"
integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==
path@^0.12.7:
version "0.12.7"
@ -391,6 +414,13 @@ qs@6.11.0:
dependencies:
side-channel "^1.0.4"
qs@6.13.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
dependencies:
side-channel "^1.0.6"
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
@ -435,10 +465,29 @@ send@0.18.0:
range-parser "~1.2.1"
statuses "2.0.1"
serve-static@1.15.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
send@0.19.0:
version "0.19.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
dependencies:
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
http-errors "2.0.0"
mime "1.6.0"
ms "2.1.3"
on-finished "2.4.1"
range-parser "~1.2.1"
statuses "2.0.1"
serve-static@1.16.0:
version "1.16.0"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92"
integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
@ -462,7 +511,7 @@ setprototypeof@1.2.0:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
side-channel@^1.0.4:
side-channel@^1.0.4, side-channel@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==

@ -16,8 +16,6 @@ const profile = {
events: ['toggleContent', 'showContent']
}
const toMaximize = ['LearnEth']
export class VerticalIcons extends Plugin {
events: EventEmitter
htmlElement: HTMLDivElement
@ -128,11 +126,6 @@ export class VerticalIcons extends Plugin {
// TODO: Only keep `this.emit` (issue#2210)
this.emit('showContent', name)
this.events.emit('showContent', name)
if (toMaximize.includes(name)) {
setTimeout(_ => {
this.call('layout', 'maximiseSidePanel')
}, 500)
}
}
/**

@ -30,11 +30,14 @@ export type PanelConfiguration = {
export class Layout extends Plugin {
event: any
panels: panels
maximised: { [key: string]: boolean }
enhanced: { [key: string]: boolean }
maximized: { [key: string]: boolean }
constructor () {
super(profile)
this.maximised = {
'dgit': true
this.maximized = {}
this.enhanced = {
'dgit': true,
'LearnEth': true
}
this.event = new EventEmitter()
}
@ -80,18 +83,30 @@ export class Layout extends Plugin {
})
this.on('sidePanel', 'focusChanged', async (name) => {
const current = await this.call('sidePanel', 'currentFocus')
if (this.maximised[current]) {
if (this.enhanced[current]) {
this.event.emit('enhancesidepanel')
}
if (this.maximized[current]) {
this.event.emit('maximisesidepanel')
} else {
}
if (!this.enhanced[current] && !this.maximized[current]) {
this.event.emit('resetsidepanel')
}
})
this.on('pinnedPanel', 'pinnedPlugin', async (name) => {
const current = await this.call('pinnedPanel', 'currentFocus')
if (this.maximised[current]) {
if (this.enhanced[current]) {
this.event.emit('enhancepinnedpanel')
}
if (this.maximized[current]) {
this.event.emit('maximisepinnedpanel')
} else {
}
if (!this.enhanced[current] && !this.maximized[current]) {
this.event.emit('resetpinnedpanel')
}
})
@ -128,13 +143,13 @@ export class Layout extends Plugin {
async maximiseSidePanel () {
const current = await this.call('sidePanel', 'currentFocus')
this.maximised[current] = true
this.maximized[current] = true
this.event.emit('maximisesidepanel')
}
async maximisePinnedPanel () {
const current = await this.call('pinnedPanel', 'currentFocus')
this.maximised[current] = true
this.maximized[current] = true
this.event.emit('maximisepinnedpanel')
}
@ -146,13 +161,13 @@ export class Layout extends Plugin {
async resetSidePanel () {
const current = await this.call('sidePanel', 'currentFocus')
this.maximised[current] = false
this.enhanced[current] = false
this.event.emit('resetsidepanel')
}
async resetPinnedPanel () {
const current = await this.call('pinnedPanel', 'currentFocus')
this.maximised[current] = false
this.enhanced[current] = false
this.event.emit('resetpinnedpanel')
}
}

@ -157,8 +157,6 @@ export class TemplatesSelectionPlugin extends ViewPlugin {
key={template.name}
title={template.name}
tooltipTitle={template.tooltip}
onClick={template.onClick}
onClickLabel={template.onClickLabel}
hScrollable={false}
>
{template.items.map(item => {
@ -169,14 +167,14 @@ export class TemplatesSelectionPlugin extends ViewPlugin {
id={item.name}
searchKeywords={[item.displayName, item.description, template.name]}
tagList={item.tagList}
classList='TSCellStyle'
classList={'TSCellStyle'}
>
<div className='d-flex justify-content-between h-100 flex-column'>
<div className='d-flex flex-column'>
<div>
{item.description && <span className='text-dark'>{item.description}</span>}
</div>
<div className='d-flex flex-wrap'>
<div className='d-flex flex-wrap mb-2'>
{(item.opts && item.opts.upgradeable && item.opts.upgradeable === 'uupds') && <span className='badgeForCell badge text-secondary'>Upgradeable-UUPS</span>}
{(item.opts && item.opts.mintable) && <span className='badgeForCell text-secondary'>mintable</span>}
{(item.opts && item.opts.burnable) && <span className='badgeForCell text-secondary'>burnable</span>}
@ -214,6 +212,20 @@ export class TemplatesSelectionPlugin extends ViewPlugin {
</div>
</RemixUIGridCell>
})}
{ template.name === 'Cookbook' && <RemixUIGridCell
plugin={this}
title={"More from Cookbook"}
key={"cookbookMore"}
id={"cookBookMore"}
searchKeywords={["cookbook"]}
tagList={[]}
classList='TSCellStyle'
>
<div className='d-flex justify-content-between h-100 flex-column'>
<span className='pt-4 px-1 h6 text-dark'>{ template.description }</span>
<span style={{ cursor: 'pointer' }} className='mt-2 btn btn-sm border align-items-left' onClick={() => template.onClick() }>{ template.onClickLabel }</span>
</div>
</RemixUIGridCell> }
</RemixUIGridSection>
})}
</RemixUIGridView>

@ -47,13 +47,13 @@ export const templates = (intl, plugin) => {
},
{
value: "ozerc721",
displayName: "ERC721",
displayName: "ERC721 (NFT)",
tagList: ["ERC721", "Solidity"],
description: 'A simple non-fungible token (NFT) contract'
},
{
value: "ozerc721",
displayName: "ERC721",
displayName: "ERC721 (NFT)",
description: "An ERC721 contract with:",
tagList: ["Solidity", "ERC721"],
opts: {
@ -132,7 +132,7 @@ export const templates = (intl, plugin) => {
{
value: "ozerc20",
displayName: "UUPS ERC20",
description: "UUSP ERC20 contract with:",
description: "UUPS ERC20 contract with:",
opts: {
upgradeable: 'uups',
mintable: true
@ -142,7 +142,7 @@ export const templates = (intl, plugin) => {
{
value: "ozerc20",
displayName: "UUPS ERC20",
description: "UUSP ERC20 contract with:",
description: "UUPS ERC20 contract with:",
opts: {
upgradeable: 'uups',
mintable: true,
@ -153,7 +153,7 @@ export const templates = (intl, plugin) => {
{
value: "ozerc20",
displayName: "UUPS ERC20",
description: "UUSP ERC20 contract with:",
description: "UUPS ERC20 contract with:",
opts: {
upgradeable: 'uups',
mintable: true,
@ -163,7 +163,7 @@ export const templates = (intl, plugin) => {
},
{
value: "ozerc721",
displayName: "UUPS ERC721",
displayName: "UUPS ERC721 (NFT)",
description: "A simple UUPS ERC721 contract",
opts: {
upgradeable: 'uups'
@ -172,7 +172,7 @@ export const templates = (intl, plugin) => {
},
{
value: "ozerc721",
displayName: "UUPS ERC721",
displayName: "UUPS ERC721 (NFT)",
description: "UUPS ERC721 contract with:",
opts: {
upgradeable: 'uups',
@ -183,7 +183,7 @@ export const templates = (intl, plugin) => {
{
value: "ozerc721",
displayName: "UUPS ERC721 (NFT)",
description: "Non-fungible Token Standard",
description: "UUPS ERC721 contract with:",
opts: {
upgradeable: 'uups',
mintable: true,
@ -194,7 +194,7 @@ export const templates = (intl, plugin) => {
{
value: "ozerc721",
displayName: "UUPS ERC721 (NFT)",
description: "UUPS ERC721 with: ",
description: "UUPS ERC721 contract with:",
opts: {
upgradeable: 'uups',
mintable: true,
@ -265,23 +265,59 @@ export const templates = (intl, plugin) => {
plugin.call('menuicons', 'showContent', 'cookbookdev')
},
onClickLabel: 'Open Cookbook Plugin',
description: 'Discover more templates!',
items: [
{ value: "token-sale", displayName: 'Token Sale' },
{ value: "simple-nft-sale", displayName: 'Simple Nft Sale' },
{ value: "Azuki-ERC721A-NFT-Sale-basic", displayName: 'Azuki ERC721A NFT Sale basic' },
{ value: "Azuki-ERC721A-ERC721A", displayName: 'Azuki ERC721A' },
{ value: "token-staking-with-infinite-rewards", displayName: 'Token Staking with infinite rewards' },
{ value: "nft-staking-with-infinite-rewards", displayName: 'Nft Staking with infinite rewards' },
{ value: "basic-dao", displayName: 'Basic DAO' },
{ value: "soulbound-nft", displayName: 'Soulbound Nft' },
{ value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers", displayName: 'Multi collection NFT', description: "Multi collection NFT with:", opts: {
burnable: true,
pausable: true
}, },
{
value: "token-sale",
displayName: 'Token Sale',
description: "ERC20 token sale contact. Sell tokens for ETH"
},
{
value: "simple-nft-sale",
displayName: 'Simple Nft Sale',
description: "ERC721 NFT with an adjustable price & to mint free NFTs"
},
{
value: "Azuki-ERC721A-NFT-Sale-basic",
displayName: 'Azuki ERC721A NFT Sale basic',
description: "An implementation of the ERC721A standard"
},
{
value: "Azuki-ERC721A-NFT-Sale",
displayName: 'Azuki ERC721A NFT Sale',
description: "An extension of the ERC721A standard with wallet limit"
},
{
value: "token-staking-with-infinite-rewards",
displayName: 'Token Staking with infinite rewards',
description: "Token staking contract to reward ERC20 tokens for every token staked"
},
{
value: "nft-staking-with-infinite-rewards",
displayName: 'NFT Staking with infinite rewards',
description: "NFT staking contract to reward exact number of ERC20 tokens per day"
},
{
value: "basic-dao",
displayName: 'Basic DAO',
description: "A very simple implementation of a DAO"
},
{
value: "soulbound-nft",
displayName: 'Soulbound NFT',
description: "ERC721 Soulbound NFT with no transfer capability"
},
{ value: "multi-collection-nft-with-burnable-nfts-and-pausable-transfers",
displayName: 'Multi collection NFT',
description: "Multi collection NFT with:",
opts: {
burnable: true,
pausable: true
}, },
]
},
{
name: "OxProject",
name: "0xProject",
items: [
{ value: "zeroxErc20", displayName: "ERC20", tagList: ["ERC20", "Solidity"], description: "A fungible token contract by 0xProject" }
]
@ -289,7 +325,7 @@ export const templates = (intl, plugin) => {
{
name: "Gnosis Safe",
items: [
{ value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or customize the Gnosis Safe.' }
{ value: "gnosisSafeMultisig", tagList: ["Solidity"], displayName: intl.formatMessage({ id: 'filePanel.multiSigWallet' }), description: 'Deploy or customize the Gnosis Safe MultiSig Wallet' }
]
},
{
@ -316,12 +352,12 @@ export const templates = (intl, plugin) => {
items: [
{ value: "uniswapV4Template",
displayName: intl.formatMessage({ id: 'filePanel.uniswapV4Template' }),
description: 'Use an Uniswap hook'
description: 'Use a Uniswap hook'
},
{
value: "breakthroughLabsUniswapv4Hooks",
displayName: intl.formatMessage({ id: 'filePanel.breakthroughLabsUniswapv4Hooks' }),
description: 'Use an Uniswap hook developed by Breakthrough Labs'
description: 'Use a Uniswap hook developed by Breakthrough Labs'
},
{
value: "uniswapV4HookBookMultiSigSwapHook",
@ -352,25 +388,25 @@ export const templates = (intl, plugin) => {
{
value: "etherscanScripts",
displayName: intl.formatMessage({ id: 'filePanel.addscriptetherscan' }),
description: 'Script for verifying a Contract in Etherscan.'
description: 'Script for verifying a Contract in Etherscan'
},
],
},
{
name: 'Github Actions',
name: 'GitHub Actions',
items: [
{ value: "runJsTestAction",
displayName: intl.formatMessage({ id: 'filePanel.tssoltestghaction' }),
description: 'A Mocha Chai test workflow in a GitHub CI.'
description: 'A Mocha Chai test workflow in a GitHub CI'
},
{ value: "runSolidityUnittestingAction",
displayName: intl.formatMessage({ id: 'filePanel.solghaction' }),
description: 'Run a Solidity unit test workflow in a GitHub CI.'
description: 'Run a Solidity unit test workflow in a GitHub CI'
},
{
value: "runSlitherAction",
displayName: intl.formatMessage({ id: 'filePanel.slitherghaction' }),
description: 'Run a Slither security analysis in a GitHub CI.'
description: 'Run a Slither security analysis in a GitHub CI'
}
],
IsArtefact: true

@ -12,7 +12,7 @@
"filePanel.restore": "Restore",
"filePanel.name": "Name",
"filePanel.save": "Save",
"filePanel.workspace.create": "Create Workspace using template",
"filePanel.workspace.create": "Create Workspace Using Template",
"filePanel.workspace.createBlank": "Create Blank Workspace",
"filePanel.workspace.create.desktop": "Create project in new folder",
"filePanel.workspace.rename": "Rename Workspace",
@ -71,7 +71,7 @@
"filePanel.createNewFile": "Create new file",
"filePanel.createNewFolder": "Create new folder",
"filePanel.publishToGist": "Publish to Gist",
"filePanel.workspace.publishToGist": "Publish workspace to GitHub gist",
"filePanel.workspace.publishToGist": "Publish Workspace to GitHub Gist",
"filePanel.uploadFile": "Open a File from your File System",
"filePanel.uploadFolder": "Upload folder",
"filePanel.updateGist": "Update Gist",

@ -93,6 +93,8 @@ const dependentModules = ['foundry', 'hardhat', 'truffle', 'slither']
const loadLocalPlugins = ['doc-gen', 'doc-viewer', 'etherscan', 'vyper', 'solhint', 'walletconnect', 'circuit-compiler', 'learneth', 'quick-dapp']
const partnerPlugins = ['cookbookdev']
const sensitiveCalls = {
fileManager: ['writeFile', 'copyFile', 'rename', 'copyDir'],
contentImport: ['resolveAndSave'],
@ -206,6 +208,11 @@ export class RemixAppManager extends PluginManager {
return true
}
// skipping partner plugins' requests
if (partnerPlugins[from]) {
return true
}
// ask the user for permission
return await this.call('permissionhandler', 'askPermission', this.profiles[from], this.profiles[to], method, message, isSensitiveCall)
}

@ -76,7 +76,7 @@
"byline": "^5.0.0",
"chokidar": "^3.5.3",
"electron-updater": "^6.1.8",
"express": "^4.19.2",
"express": "^4.20.0",
"isomorphic-git": "^1.24.2",
"matomo-tracker": "^2.2.4",
"node-pty": "^1.0.0",

@ -1926,10 +1926,10 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
body-parser@1.20.2, body-parser@^1.16.0:
version "1.20.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
body-parser@1.20.3, body-parser@^1.16.0:
version "1.20.3"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6"
integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
@ -1939,7 +1939,7 @@ body-parser@1.20.2, body-parser@^1.16.0:
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.11.0"
qs "6.13.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
@ -2950,6 +2950,11 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
encodeurl@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
@ -3411,37 +3416,37 @@ execa@^5.0.0, execa@^5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
express@^4.14.0, express@^4.19.2:
version "4.19.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
express@^4.14.0, express@^4.20.0:
version "4.20.0"
resolved "https://registry.yarnpkg.com/express/-/express-4.20.0.tgz#f1d08e591fcec770c07be4767af8eb9bcfd67c48"
integrity sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
body-parser "1.20.2"
body-parser "1.20.3"
content-disposition "0.5.4"
content-type "~1.0.4"
cookie "0.6.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
encodeurl "~1.0.2"
encodeurl "~2.0.0"
escape-html "~1.0.3"
etag "~1.8.1"
finalhandler "1.2.0"
fresh "0.5.2"
http-errors "2.0.0"
merge-descriptors "1.0.1"
merge-descriptors "1.0.3"
methods "~1.1.2"
on-finished "2.4.1"
parseurl "~1.3.3"
path-to-regexp "0.1.7"
path-to-regexp "0.1.10"
proxy-addr "~2.0.7"
qs "6.11.0"
range-parser "~1.2.1"
safe-buffer "5.2.1"
send "0.18.0"
serve-static "1.15.0"
send "0.19.0"
serve-static "1.16.0"
setprototypeof "1.2.0"
statuses "2.0.1"
type-is "~1.6.18"
@ -4971,10 +4976,10 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
merge-descriptors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
merge-stream@^2.0.0:
version "2.0.0"
@ -5606,10 +5611,10 @@ path-scurry@^1.11.1:
lru-cache "^10.2.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
path-to-regexp@0.1.10:
version "0.1.10"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b"
integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==
pathval@1.1.1:
version "1.1.1"
@ -5771,12 +5776,12 @@ qs@6.11.0:
dependencies:
side-channel "^1.0.4"
qs@^6.11.2:
version "6.11.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
qs@6.13.0, qs@^6.11.2:
version "6.13.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
dependencies:
side-channel "^1.0.4"
side-channel "^1.0.6"
qs@~6.5.2:
version "6.5.3"
@ -6159,6 +6164,25 @@ send@0.18.0:
range-parser "~1.2.1"
statuses "2.0.1"
send@0.19.0:
version "0.19.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
dependencies:
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
http-errors "2.0.0"
mime "1.6.0"
ms "2.1.3"
on-finished "2.4.1"
range-parser "~1.2.1"
statuses "2.0.1"
serialize-error@^7.0.1:
version "7.0.1"
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz"
@ -6180,10 +6204,10 @@ serialize-javascript@^6.0.1:
dependencies:
randombytes "^2.1.0"
serve-static@1.15.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
serve-static@1.16.0:
version "1.16.0"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.0.tgz#2bf4ed49f8af311b519c46f272bf6ac3baf38a92"
integrity sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
@ -6278,6 +6302,16 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2"
object-inspect "^1.9.0"
side-channel@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
signal-exit@^3.0.2, signal-exit@^3.0.3:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"

@ -1,6 +1,6 @@
{
"name": "@remix-project/ghaction-helper",
"version": "0.1.36",
"version": "0.1.37",
"description": "Solidity Tests GitHub Action Helper",
"main": "src/index.js",
"scripts": {
@ -19,17 +19,17 @@
},
"homepage": "https://github.com/ethereum/remix-project#readme",
"devDependencies": {
"@remix-project/remix-solidity": "^0.5.42",
"@remix-project/remix-solidity": "^0.5.43",
"@types/chai": "^4.3.4",
"typescript": "^4.9.3"
},
"dependencies": {
"@ethereum-waffle/chai": "^3.4.4",
"@remix-project/remix-simulator": "^0.2.56",
"@remix-project/remix-simulator": "^0.2.57",
"chai": "^4.3.7",
"ethers": "^5.7.2",
"web3": "^4.1.1"
},
"types": "./src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444"
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-analyzer",
"version": "0.5.65",
"version": "0.5.66",
"description": "Tool to perform static analysis on Solidity smart contracts",
"scripts": {
"test": "./../../node_modules/.bin/ts-node --project ../../tsconfig.base.json --require tsconfig-paths/register ./../../node_modules/.bin/tape ./test/tests.ts"
@ -25,8 +25,8 @@
"@ethereumjs/tx": "5.4.0",
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@remix-project/remix-astwalker": "^0.0.86",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-astwalker": "^0.0.87",
"@remix-project/remix-lib": "^0.5.64",
"async": "^2.6.2",
"ethers": "^5.4.2",
"ethjs-util": "^0.1.6",
@ -50,6 +50,6 @@
"typescript": "^3.7.5"
},
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444",
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01",
"main": "./src/index.js"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-astwalker",
"version": "0.0.86",
"version": "0.0.87",
"description": "Tool to walk through Solidity AST",
"main": "src/index.js",
"scripts": {
@ -37,7 +37,7 @@
"@ethereumjs/tx": "5.4.0",
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-lib": "^0.5.64",
"@types/tape": "^4.2.33",
"async": "^2.6.2",
"ethers": "^5.4.2",
@ -53,6 +53,6 @@
"tap-spec": "^5.0.0"
},
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444",
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01",
"types": "./src/index.d.ts"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-debug",
"version": "0.5.56",
"version": "0.5.57",
"description": "Tool to debug Ethereum transactions",
"contributors": [
{
@ -26,10 +26,10 @@
"@ethereumjs/tx": "5.4.0",
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@remix-project/remix-astwalker": "^0.0.86",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-simulator": "^0.2.56",
"@remix-project/remix-solidity": "^0.5.42",
"@remix-project/remix-astwalker": "^0.0.87",
"@remix-project/remix-lib": "^0.5.64",
"@remix-project/remix-simulator": "^0.2.57",
"@remix-project/remix-solidity": "^0.5.43",
"ansi-gray": "^0.1.1",
"async": "^2.6.2",
"color-support": "^1.1.3",
@ -69,6 +69,6 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-debug#readme",
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444",
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01",
"types": "./src/index.d.ts"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-lib",
"version": "0.5.63",
"version": "0.5.64",
"description": "Library to various Remix tools",
"contributors": [
{
@ -55,6 +55,6 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-lib#readme",
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444",
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01",
"types": "./src/index.d.ts"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-simulator",
"version": "0.2.56",
"version": "0.2.57",
"description": "Ethereum IDE and tools for the web",
"contributors": [
{
@ -23,7 +23,7 @@
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@metamask/eth-sig-util": "^7.0.2",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-lib": "^0.5.64",
"ansi-gray": "^0.1.1",
"async": "^3.1.0",
"body-parser": "^1.18.2",
@ -71,6 +71,6 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-simulator#readme",
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444",
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01",
"types": "./src/index.d.ts"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-solidity",
"version": "0.5.42",
"version": "0.5.43",
"description": "Tool to load and run Solidity compiler",
"main": "src/index.js",
"types": "src/index.d.ts",
@ -19,7 +19,7 @@
"@ethereumjs/tx": "5.4.0",
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-lib": "^0.5.64",
"async": "^2.6.2",
"eslint-scope": "^5.0.0",
"ethers": "^5.4.2",
@ -57,5 +57,5 @@
},
"homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-solidity#readme",
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444"
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-tests",
"version": "0.2.56",
"version": "0.2.57",
"description": "Tool to test Solidity smart contracts",
"main": "src/index.js",
"types": "./src/index.d.ts",
@ -41,9 +41,9 @@
"@ethereumjs/tx": "5.4.0",
"@ethereumjs/util": "9.1.0",
"@ethereumjs/vm": "8.1.1",
"@remix-project/remix-lib": "^0.5.63",
"@remix-project/remix-simulator": "^0.2.56",
"@remix-project/remix-solidity": "^0.5.42",
"@remix-project/remix-lib": "^0.5.64",
"@remix-project/remix-simulator": "^0.2.57",
"@remix-project/remix-solidity": "^0.5.43",
"@remix-project/remix-url-resolver": "^0.0.42",
"ansi-gray": "^0.1.1",
"async": "^2.6.0",
@ -89,5 +89,5 @@
"@ethereumjs/trie": "6.2.1"
},
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444"
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01"
}

@ -8,6 +8,7 @@ interface IRemixDragBarUi {
hidden: boolean
minWidth: number
maximiseTrigger: number
enhanceTrigger: number
resetTrigger: number
layoutPosition: 'left' | 'right'
}
@ -40,32 +41,36 @@ const DragBar = (props: IRemixDragBarUi) => {
}
}, [props.hidden, offset])
useEffect(() => {
if (props.maximiseTrigger > 0) {
if (props.layoutPosition === 'left') {
const width = 0.4 * window.innerWidth
const triggerWidth = (maximiseTrigger, layoutPosition, refObject, coeff) => {
if (maximiseTrigger > 0) {
if (layoutPosition === 'left') {
const width = coeff * window.innerWidth
if (width > props.refObject.current.offsetWidth) {
props.refObject.current.style.width = width + 'px'
setTimeout(() => {
setDragBarPosX(offset + width)
}, 300)
}
} else if (props.layoutPosition === 'right') {
const width = 0.4 * window.innerWidth
props.refObject.current.style.width = width + 'px'
setTimeout(() => {
setDragBarPosX(offset + width)
}, 300)
} else if (layoutPosition === 'right') {
const width = coeff * window.innerWidth
if (width > props.refObject.current.offsetWidth) {
props.refObject.current.style.width = width + 'px'
setTimeout(() => {
setDragBarPosX(window.innerWidth - width)
}, 300)
}
refObject.current.style.width = width + 'px'
setTimeout(() => {
setDragBarPosX(window.innerWidth - width)
}, 300)
}
}
}
useEffect(() => {
triggerWidth(props.maximiseTrigger, props.layoutPosition, props.refObject, 0.4)
}, [props.maximiseTrigger])
useEffect(() => {
if (props.maximiseTrigger > 0) {
triggerWidth(props.enhanceTrigger, props.layoutPosition, props.refObject, 0.25)
}, [props.enhanceTrigger])
useEffect(() => {
if (props.maximiseTrigger > 0 || props.enhanceTrigger) {
if (props.layoutPosition === 'left') {
props.refObject.current.style.width = initialWidth.current + 'px'
setTimeout(() => {

@ -32,8 +32,10 @@ const RemixApp = (props: IRemixAppUi) => {
const [hideSidePanel, setHideSidePanel] = useState<boolean>(false)
const [hidePinnedPanel, setHidePinnedPanel] = useState<boolean>(true)
const [maximiseLeftTrigger, setMaximiseLeftTrigger] = useState<number>(0)
const [enhanceLeftTrigger, setEnhanceLeftTrigger] = useState<number>(0)
const [resetLeftTrigger, setResetLeftTrigger] = useState<number>(0)
const [maximiseRightTrigger, setMaximiseRightTrigger] = useState<number>(0)
const [enhanceRightTrigger, setEnhanceRightTrigger] = useState<number>(0)
const [resetRightTrigger, setResetRightTrigger] = useState<number>(0)
const [online, setOnline] = useState<boolean>(true)
const [locale, setLocale] = useState<{ code: string; messages: any }>({
@ -98,6 +100,12 @@ const RemixApp = (props: IRemixAppUi) => {
})
})
props.app.layout.event.on('enhancesidepanel', () => {
setEnhanceLeftTrigger((prev) => {
return prev + 1
})
})
props.app.layout.event.on('resetsidepanel', () => {
setResetLeftTrigger((prev) => {
return prev + 1
@ -110,6 +118,12 @@ const RemixApp = (props: IRemixAppUi) => {
})
})
props.app.layout.event.on('enhancepinnedpanel', () => {
setEnhanceRightTrigger((prev) => {
return prev + 1
})
})
props.app.layout.event.on('resetpinnedpanel', () => {
setResetRightTrigger((prev) => {
return prev + 1
@ -205,6 +219,7 @@ const RemixApp = (props: IRemixAppUi) => {
{props.app.sidePanel.render()}
</div>
<DragBar
enhanceTrigger={enhanceLeftTrigger}
resetTrigger={resetLeftTrigger}
maximiseTrigger={maximiseLeftTrigger}
minWidth={305}
@ -222,6 +237,7 @@ const RemixApp = (props: IRemixAppUi) => {
{
!hidePinnedPanel &&
<DragBar
enhanceTrigger={enhanceRightTrigger}
resetTrigger={resetRightTrigger}
maximiseTrigger={maximiseRightTrigger}
minWidth={331}

@ -101,7 +101,7 @@ export const getCommits = async (depth: number) => {
}
export const gitlog = async (depth: number) => {
dispatch(setLoading(true))
let commits = []
try {
commits = await getCommits(depth)

@ -47,7 +47,7 @@ export const RemixUIGridCell = (props: RemixUIGridCellProps) => {
// check for filter
if (filterCon.filter != '')
enabled = (props.title?.toLowerCase().includes(filterCon.filter?.toLowerCase()) ||
props.searchKeywords?.map(keyword => keyword.toLowerCase()).some(searchKeyword => searchKeyword.toLowerCase().includes(filterCon.filter.toLocaleLowerCase())))
props.searchKeywords?.map(keyword => keyword?.toLowerCase()).some(searchKeyword => searchKeyword?.toLowerCase().includes(filterCon.filter?.toLocaleLowerCase())))
setAnyEnabled(enabled)
}, [filterCon, props.tagList])

@ -14,8 +14,6 @@ const _paq = window._paq = window._paq || []
interface RemixUIGridSectionProps {
plugin: any
title?: string
onClick?: () => void
onClickLabel?: string
tooltipTitle?: string
hScrollable: boolean
classList?: string
@ -67,7 +65,6 @@ export const RemixUIGridSection = (props: RemixUIGridSectionProps) => {
>
<div className="w-100 remixui_grid_section">
{ props.title && <h6 className='mt-1 mb-0 align-items-left '>{ props.title }</h6> }
{ props.onClick && <span style={{ cursor: 'pointer' }} className='mt-2 btn btn-sm border align-items-left' onClick={() => props.onClick() }>{ props.onClickLabel }</span> }
<div className={(props.hScrollable) ? `d-flex flex-row pb-2 overflow-auto` : `d-flex flex-wrap`}>
{ !hasChildCell(children) && <span> No items found </span>}
{ props.children }

@ -988,7 +988,7 @@ export function Workspace() {
</CopyToClipboard>
}
</span>
<span className="d-flex">
<span className="d-flex" style={{ cursor: 'pointer' }} >
{
(!appContext.appState.gitHubUser || !appContext.appState.gitHubUser.isConnected) && <CustomTooltip
placement="right"
@ -998,7 +998,7 @@ export function Workspace() {
>
<div data-id='filepanel-login-github' className='d-flex'>
<i onClick={() => logInGithub() } className="fa-brands fa-github-alt ml-2 align-self-center" style={{ fontSize: '1.1rem', cursor: 'pointer' }} aria-hidden="true"></i>
<span onClick={() => logInGithub() } className="ml-1 style={{ cursor: 'pointer' }} "> Sign in </span>
<span onClick={() => logInGithub() } className="ml-1"> Sign in </span>
</div>
</CustomTooltip>
}
@ -1255,22 +1255,32 @@ export function Workspace() {
<div className="d-flex justify-content-between p-1">
<div className="text-uppercase text-dark pt-1 px-1">GIT</div>
{ selectedWorkspace.hasGitSubmodules?
<CustomTooltip
placement="top"
tooltipId="updateSubmodules"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="filePanel.updateSubmodules" />}
>
<div className="pr-1">
{ global.fs.browser.isRequestingCloning ? <button style={{ height: 30, minWidth: "9rem" }} className='btn btn-sm border text-dark'>
<i className="fad fa-spinner fa-spin"></i>
Updating submodules
</button> :
<div className="pr-1">
{ global.fs.browser.isRequestingCloning ?
<CustomTooltip
placement="top"
tooltipId="updatingSubmodules"
tooltipClasses="text-nowrap"
tooltipText={"Updating submodules"}
>
<button style={{ height: 30, minWidth: "9rem" }} className='btn btn-sm border text-dark'>
<i className="fad fa-spinner fa-spin mr-2"></i>
Updating...
</button>
</CustomTooltip> :
<CustomTooltip
placement="top"
tooltipId="updateSubmodules"
tooltipClasses="text-nowrap"
tooltipText={<FormattedMessage id="filePanel.updateSubmodules" />}
>
<button style={{ height: 30, minWidth: "9rem" }} onClick={updateSubModules} data-id='updatesubmodules' className={`btn btn-sm border ${highlightUpdateSubmodules ? 'text-warning' : 'text-dark'}`}>
Update submodules
</button> }
</div>
</CustomTooltip>
Update submodules
</button>
</CustomTooltip>
}
</div>
: null
}
<CustomTooltip

@ -88,6 +88,36 @@ export const TEMPLATE_METADATA: Record<string, TemplateType> = {
name: 'cookbookdev',
endpoint: 'openContract',
params: ['multi-collection-nft-with-burnable-nfts-and-pausable-transfers']
},
'OpenSea-Seaport': {
type: 'plugin',
name: 'cookbookdev',
endpoint: 'openProtocol',
params: ['OpenSea-Seaport']
},
'Ethereum-Name-Service': {
type: 'plugin',
name: 'cookbookdev',
endpoint: 'openProtocol',
params: ['Ethereum-Name-Service']
},
'Umbra-Cash': {
type: 'plugin',
name: 'cookbookdev',
endpoint: 'openProtocol',
params: ['Umbra-Cash']
},
'Aave-V3': {
type: 'plugin',
name: 'cookbookdev',
endpoint: 'openProtocol',
params: ['Aave-V3']
},
'ChainLink': {
type: 'plugin',
name: 'cookbookdev',
endpoint: 'openProtocol',
params: ['ChainLink']
}
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-url-resolver",
"version": "0.0.85",
"version": "0.0.86",
"description": "Solidity import url resolver engine",
"main": "src/index.js",
"types": "src/index.d.ts",
@ -41,5 +41,5 @@
"typescript": "^3.1.6"
},
"typings": "src/index.d.ts",
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444"
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remix-ws-templates",
"version": "1.0.50",
"version": "1.0.51",
"description": "Create a Remix IDE workspace using different templates",
"main": "src/index.js",
"types": "src/index.d.ts",
@ -24,5 +24,5 @@
"ethers": "^5.4.2",
"web3": "^4.1.1"
},
"gitHead": "57f4196f41faf8a2879a8013327f5e275e623444"
"gitHead": "28b25d08084ff0dd952f2cd649dbcd1c1ab30e01"
}

@ -1,6 +1,6 @@
{
"name": "@remix-project/remixd",
"version": "0.6.36",
"version": "0.6.37",
"description": "remix server: allow accessing file system from remix.ethereum.org and start a dev environment (see help section)",
"main": "index.js",
"types": "./index.d.ts",

@ -1,6 +1,6 @@
{
"name": "remix-project",
"version": "0.54.0-dev",
"version": "0.55.0-dev",
"license": "MIT",
"description": "Ethereum Remix Monorepo",
"main": "index.js",

@ -14025,9 +14025,9 @@ domhandler@^4.2.0:
domelementtype "^2.2.0"
dompurify@^2.2.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631"
integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA==
version "2.5.6"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.6.tgz#8402b501611eaa7fb3786072297fcbe2787f8592"
integrity sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==
domutils@^2.6.0:
version "2.8.0"

Loading…
Cancel
Save