├── .gitignore ├── .prettierignore ├── .prettierrc ├── README.md ├── SmallSite.html ├── SmallSite.zip ├── SmallSiteEncoded.txt ├── hh-unstoppable ├── .gitignore ├── README.md ├── contracts │ └── UnstoppableFrog.sol ├── deploy │ └── 01_deploy.ts ├── deployments │ └── arbitrum │ │ ├── .chainId │ │ ├── UnstoppableFrog.json │ │ └── solcInputs │ │ ├── 46add8a04b4e95c450880bc9d08b27e1.json │ │ └── 959fc25b486f9ba630018dc964d3963f.json ├── hardhat.config.ts ├── meh.svg ├── test │ └── Lock.ts ├── tsconfig.json └── utils │ └── helper-functions.ts ├── img ├── import-ipfs.png ├── ron.webp └── upload-ipfs.png ├── next.config.js ├── package.json ├── pages ├── _app.tsx ├── api │ └── hello.ts └── index.tsx ├── public ├── favicon.ico ├── frog.png └── lily-pad.png ├── relative-links-output ├── 404.html ├── _next │ └── static │ │ ├── chunks │ │ ├── framework-db825bd0b4ae01ef.js │ │ ├── main-5fea2acfd5d9e895.js │ │ ├── pages │ │ │ ├── _app-deb173bd80cbaa92.js │ │ │ ├── _error-7397496ca01950b1.js │ │ │ └── index-36b30e9afe032536.js │ │ ├── polyfills-c67a75d1b6f99dc8.js │ │ └── webpack-7ee66019f7f6d30f.js │ │ ├── css │ │ ├── ab44ce7add5c3d11.css │ │ └── f49f07195cf978c4.css │ │ ├── media │ │ └── lily-pad.c7df30b2.png │ │ └── txOYopp3gUbVMfgCziGxY │ │ ├── _buildManifest.js │ │ └── _ssgManifest.js ├── favicon.ico ├── frog.png ├── index.html ├── lily-pad.png └── manifest.arkb ├── static-output.car ├── styles ├── Home.module.css └── globals.css ├── tsconfig.json ├── unstoppable-single-file └── index.html ├── unstoppable-ui-static-export ├── 404.html ├── _next │ └── static │ │ ├── chunks │ │ ├── framework-db825bd0b4ae01ef.js │ │ ├── main-5fea2acfd5d9e895.js │ │ ├── pages │ │ │ ├── _app-deb173bd80cbaa92.js │ │ │ ├── _error-7397496ca01950b1.js │ │ │ └── index-36b30e9afe032536.js │ │ ├── polyfills-c67a75d1b6f99dc8.js │ │ └── webpack-7ee66019f7f6d30f.js │ │ ├── css │ │ ├── ab44ce7add5c3d11.css │ │ └── f49f07195cf978c4.css │ │ ├── media │ │ └── lily-pad.c7df30b2.png │ │ └── txOYopp3gUbVMfgCziGxY │ │ ├── _buildManifest.js │ │ └── _ssgManifest.js ├── favicon.ico ├── frog.png ├── index.html ├── lily-pad.png └── manifest.arkb ├── upload-to-skynet.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | 38 | .vscode 39 | .article.md 40 | .video.md 41 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | artifacts 3 | cache 4 | coverage* 5 | gasReporterOutput.json 6 | package.json 7 | img 8 | .env 9 | .* 10 | README.md 11 | coverage.json 12 | deployments -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "useTabs": false, 4 | "semi": false, 5 | "singleQuote": false, 6 | "printWidth": 100 7 | } 8 | -------------------------------------------------------------------------------- /SmallSite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 |

Hello! This is a very small site 🐸

11 | 12 | 13 | -------------------------------------------------------------------------------- /SmallSite.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/SmallSite.zip -------------------------------------------------------------------------------- /SmallSiteEncoded.txt: -------------------------------------------------------------------------------- 1 | PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkRvY3VtZW50PC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxoMT5IZWxsbyEgVGhpcyBpcyBhIHZlcnkgc21hbGwgc2l0ZSDwn5C4PC9oMT4KICAgIAo8L2JvZHk+CjwvaHRtbD4= 2 | -------------------------------------------------------------------------------- /hh-unstoppable/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | coverage 4 | coverage.json 5 | typechain 6 | typechain-types 7 | 8 | #Hardhat files 9 | cache 10 | artifacts 11 | 12 | -------------------------------------------------------------------------------- /hh-unstoppable/README.md: -------------------------------------------------------------------------------- 1 | # Sample Hardhat Project 2 | 3 | This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. 4 | 5 | Try running some of the following tasks: 6 | 7 | ```shell 8 | npx hardhat help 9 | npx hardhat test 10 | GAS_REPORT=true npx hardhat test 11 | npx hardhat node 12 | npx hardhat run scripts/deploy.ts 13 | ``` 14 | -------------------------------------------------------------------------------- /hh-unstoppable/contracts/UnstoppableFrog.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity 0.8.7; 3 | 4 | import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; 5 | import "base64-sol/base64.sol"; 6 | 7 | contract UnstoppableFrog is ERC721 { 8 | string private s_imageURI; 9 | uint256 public s_tokenCounter; 10 | string constant svg = 11 | unicode'I am but a humble frog 🐸'; 12 | 13 | constructor() ERC721("UnstoppableFrog", "UF") { 14 | s_imageURI = svgToImageURI(); 15 | _safeMint(msg.sender, 0); 16 | s_tokenCounter = s_tokenCounter + 1; 17 | } 18 | 19 | function svgToImageURI() public pure returns (string memory) { 20 | string memory baseURL = "data:image/svg+xml;base64,"; 21 | string memory svgBase64Encoded = Base64.encode(bytes(string(abi.encodePacked(svg)))); 22 | return string(abi.encodePacked(baseURL, svgBase64Encoded)); 23 | } 24 | 25 | function _baseURI() internal pure override returns (string memory) { 26 | return "data:application/json;base64,"; 27 | } 28 | 29 | function tokenURI( 30 | uint256 /*tokenId*/ 31 | ) public view virtual override returns (string memory) { 32 | return 33 | string( 34 | abi.encodePacked( 35 | _baseURI(), 36 | Base64.encode( 37 | bytes( 38 | abi.encodePacked( 39 | '{"name":"', 40 | name(), // You can add whatever name here 41 | '", "description":"An NFT that has a tokenURI for a unstoppable website", ', 42 | '"attributes": [{"trait_type": "coolness", "value": 100}], "image":"', 43 | s_imageURI, 44 | '"}' 45 | ) 46 | ) 47 | ) 48 | ) 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /hh-unstoppable/deploy/01_deploy.ts: -------------------------------------------------------------------------------- 1 | import { DeployFunction } from "hardhat-deploy/types" 2 | import { verify } from "../utils/helper-functions" 3 | 4 | 5 | const deployFunction: DeployFunction = async ({ deployments, getNamedAccounts }) => { 6 | const { deploy } = deployments 7 | const { deployer } = await getNamedAccounts() 8 | 9 | console.log("Deploying...") 10 | const frogNftDeployment = await deploy("UnstoppableFrog", { 11 | from: deployer, 12 | args: [], 13 | log: true, 14 | waitConfirmations: 6, 15 | }) 16 | console.log("Verifying...") 17 | await verify(frogNftDeployment.address, []) 18 | } 19 | 20 | export default deployFunction 21 | deployFunction.tags = ["all"] 22 | -------------------------------------------------------------------------------- /hh-unstoppable/deployments/arbitrum/.chainId: -------------------------------------------------------------------------------- 1 | 42161 -------------------------------------------------------------------------------- /hh-unstoppable/deployments/arbitrum/solcInputs/959fc25b486f9ba630018dc964d3963f.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "Solidity", 3 | "sources": { 4 | "contracts/UnstoppableFrog.sol": { 5 | "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.7;\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\nimport \"base64-sol/base64.sol\";\n\ncontract UnstoppableFrog is ERC721 {\n string private s_imageURI;\n uint256 public s_tokenCounter;\n string constant svg =\n unicode'I am but a humble frog 🐸';\n\n constructor() ERC721(\"UnstoppableFrog\", \"UF\") {\n s_imageURI = svgToImageURI();\n _safeMint(msg.sender, 0);\n s_tokenCounter = s_tokenCounter + 1;\n }\n\n function svgToImageURI() public pure returns (string memory) {\n string memory baseURL = \"data:image/svg+xml;base64,\";\n string memory svgBase64Encoded = Base64.encode(bytes(string(abi.encodePacked(svg))));\n return string(abi.encodePacked(baseURL, svgBase64Encoded));\n }\n\n function _baseURI() internal pure override returns (string memory) {\n return \"data:application/json;base64,\";\n }\n\n function tokenURI(\n uint256 /*tokenId*/\n ) public view virtual override returns (string memory) {\n return\n string(\n abi.encodePacked(\n _baseURI(),\n Base64.encode(\n bytes(\n abi.encodePacked(\n '{\"name\":\"',\n name(), // You can add whatever name here\n '\", \"description\":\"An NFT that has a tokenURI for a unstoppable website\", ',\n '\"attributes\": [{\"trait_type\": \"coolness\", \"value\": 100}], \"image\":\"',\n s_imageURI,\n '\"}'\n )\n )\n )\n )\n );\n }\n}\n" 6 | }, 7 | "@openzeppelin/contracts/token/ERC721/ERC721.sol": { 8 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC721.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"./extensions/IERC721Metadata.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../utils/Strings.sol\";\nimport \"../../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\n using Address for address;\n using Strings for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return\n interfaceId == type(IERC721).interfaceId ||\n interfaceId == type(IERC721Metadata).interfaceId ||\n super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: address zero is not a valid owner\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: invalid token ID\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n _requireMinted(tokenId);\n\n string memory baseURI = _baseURI();\n return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : \"\";\n }\n\n /**\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n * by default, can be overridden in child contracts.\n */\n function _baseURI() internal view virtual returns (string memory) {\n return \"\";\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not token owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n _requireMinted(tokenId);\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n _setApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: caller is not token owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: caller is not token owner nor approved\");\n _safeTransfer(from, to, tokenId, data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n address owner = ERC721.ownerOf(tokenId);\n return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(address(0), to, tokenId);\n\n _afterTokenTransfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n\n emit Transfer(owner, address(0), tokenId);\n\n _afterTokenTransfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721.ownerOf(tokenId) == from, \"ERC721: transfer from incorrect owner\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n\n _afterTokenTransfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Approve `operator` to operate on all of `owner` tokens\n *\n * Emits an {ApprovalForAll} event.\n */\n function _setApprovalForAll(\n address owner,\n address operator,\n bool approved\n ) internal virtual {\n require(owner != operator, \"ERC721: approve to caller\");\n _operatorApprovals[owner][operator] = approved;\n emit ApprovalForAll(owner, operator, approved);\n }\n\n /**\n * @dev Reverts if the `tokenId` has not been minted yet.\n */\n function _requireMinted(uint256 tokenId) internal view virtual {\n require(_exists(tokenId), \"ERC721: invalid token ID\");\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\n return retval == IERC721Receiver.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n /// @solidity memory-safe-assembly\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n\n /**\n * @dev Hook that is called after any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _afterTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n}\n" 9 | }, 10 | "base64-sol/base64.sol": { 11 | "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0;\n\n/// @title Base64\n/// @author Brecht Devos - \n/// @notice Provides functions for encoding/decoding base64\nlibrary Base64 {\n string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n bytes internal constant TABLE_DECODE = hex\"0000000000000000000000000000000000000000000000000000000000000000\"\n hex\"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000\"\n hex\"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000\"\n hex\"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000\";\n\n function encode(bytes memory data) internal pure returns (string memory) {\n if (data.length == 0) return '';\n\n // load the table into memory\n string memory table = TABLE_ENCODE;\n\n // multiply by 4/3 rounded up\n uint256 encodedLen = 4 * ((data.length + 2) / 3);\n\n // add some extra buffer at the end required for the writing\n string memory result = new string(encodedLen + 32);\n\n assembly {\n // set the actual output length\n mstore(result, encodedLen)\n\n // prepare the lookup table\n let tablePtr := add(table, 1)\n\n // input ptr\n let dataPtr := data\n let endPtr := add(dataPtr, mload(data))\n\n // result ptr, jump over length\n let resultPtr := add(result, 32)\n\n // run over the input, 3 bytes at a time\n for {} lt(dataPtr, endPtr) {}\n {\n // read 3 bytes\n dataPtr := add(dataPtr, 3)\n let input := mload(dataPtr)\n\n // write 4 characters\n mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))\n resultPtr := add(resultPtr, 1)\n mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))\n resultPtr := add(resultPtr, 1)\n mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))\n resultPtr := add(resultPtr, 1)\n mstore8(resultPtr, mload(add(tablePtr, and( input, 0x3F))))\n resultPtr := add(resultPtr, 1)\n }\n\n // padding with '='\n switch mod(mload(data), 3)\n case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }\n case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }\n }\n\n return result;\n }\n\n function decode(string memory _data) internal pure returns (bytes memory) {\n bytes memory data = bytes(_data);\n\n if (data.length == 0) return new bytes(0);\n require(data.length % 4 == 0, \"invalid base64 decoder input\");\n\n // load the table into memory\n bytes memory table = TABLE_DECODE;\n\n // every 4 characters represent 3 bytes\n uint256 decodedLen = (data.length / 4) * 3;\n\n // add some extra buffer at the end required for the writing\n bytes memory result = new bytes(decodedLen + 32);\n\n assembly {\n // padding with '='\n let lastBytes := mload(add(data, mload(data)))\n if eq(and(lastBytes, 0xFF), 0x3d) {\n decodedLen := sub(decodedLen, 1)\n if eq(and(lastBytes, 0xFFFF), 0x3d3d) {\n decodedLen := sub(decodedLen, 1)\n }\n }\n\n // set the actual output length\n mstore(result, decodedLen)\n\n // prepare the lookup table\n let tablePtr := add(table, 1)\n\n // input ptr\n let dataPtr := data\n let endPtr := add(dataPtr, mload(data))\n\n // result ptr, jump over length\n let resultPtr := add(result, 32)\n\n // run over the input, 4 characters at a time\n for {} lt(dataPtr, endPtr) {}\n {\n // read 4 characters\n dataPtr := add(dataPtr, 4)\n let input := mload(dataPtr)\n\n // write 3 bytes\n let output := add(\n add(\n shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),\n shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),\n add(\n shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),\n and(mload(add(tablePtr, and( input , 0xFF))), 0xFF)\n )\n )\n mstore(resultPtr, shl(232, output))\n resultPtr := add(resultPtr, 3)\n }\n }\n\n return result;\n }\n}\n" 12 | }, 13 | "@openzeppelin/contracts/token/ERC721/IERC721.sol": { 14 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes calldata data\n ) external;\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n}\n" 15 | }, 16 | "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { 17 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(\n address operator,\n address from,\n uint256 tokenId,\n bytes calldata data\n ) external returns (bytes4);\n}\n" 18 | }, 19 | "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { 20 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" 21 | }, 22 | "@openzeppelin/contracts/utils/Address.sol": { 23 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" 24 | }, 25 | "@openzeppelin/contracts/utils/Context.sol": { 26 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" 27 | }, 28 | "@openzeppelin/contracts/utils/Strings.sol": { 29 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" 30 | }, 31 | "@openzeppelin/contracts/utils/introspection/ERC165.sol": { 32 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" 33 | }, 34 | "@openzeppelin/contracts/utils/introspection/IERC165.sol": { 35 | "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" 36 | } 37 | }, 38 | "settings": { 39 | "optimizer": { 40 | "enabled": false, 41 | "runs": 200 42 | }, 43 | "outputSelection": { 44 | "*": { 45 | "*": [ 46 | "abi", 47 | "evm.bytecode", 48 | "evm.deployedBytecode", 49 | "evm.methodIdentifiers", 50 | "metadata", 51 | "devdoc", 52 | "userdoc", 53 | "storageLayout", 54 | "evm.gasEstimates" 55 | ], 56 | "": [ 57 | "ast" 58 | ] 59 | } 60 | }, 61 | "metadata": { 62 | "useLiteralContent": true 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /hh-unstoppable/hardhat.config.ts: -------------------------------------------------------------------------------- 1 | import "@typechain/hardhat" 2 | import "@nomiclabs/hardhat-waffle" 3 | import "@nomiclabs/hardhat-etherscan" 4 | import "@nomiclabs/hardhat-ethers" 5 | import "solidity-coverage" 6 | import "hardhat-deploy" 7 | import { HardhatUserConfig } from "hardhat/config" 8 | 9 | const config: HardhatUserConfig = { 10 | solidity: "0.8.7", 11 | networks: { 12 | arbitrum: { 13 | url: process.env.ARBITRUM_RPC_URL, 14 | accounts: [process.env.PRIVATE_KEY!], 15 | saveDeployments: true, 16 | chainId: 42161, 17 | }, 18 | goerli: { 19 | url: process.env.GOERLI_RPC_URL, 20 | accounts: [process.env.PRIVATE_KEY!], 21 | saveDeployments: true, 22 | chainId: 5, 23 | }, 24 | }, 25 | namedAccounts: { 26 | deployer: { 27 | default: 0, 28 | }, 29 | }, 30 | etherscan: { 31 | apiKey: { 32 | arbitrumOne: process.env.ETHERSCAN_ARBITRUM_TOKEN!, 33 | rinkeby: process.env.ETHERSCAN_TOKEN!, 34 | }, 35 | }, 36 | } 37 | 38 | export default config 39 | -------------------------------------------------------------------------------- /hh-unstoppable/meh.svg: -------------------------------------------------------------------------------- 1 | I am but a humble frog 🐸 -------------------------------------------------------------------------------- /hh-unstoppable/test/Lock.ts: -------------------------------------------------------------------------------- 1 | import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers" 2 | import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs" 3 | import { expect } from "chai" 4 | import { ethers } from "hardhat" 5 | 6 | describe("Lock", function () { 7 | // We define a fixture to reuse the same setup in every test. 8 | // We use loadFixture to run this setup once, snapshot that state, 9 | // and reset Hardhat Network to that snapshot in every test. 10 | async function deployOneYearLockFixture() { 11 | const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60 12 | const ONE_GWEI = 1_000_000_000 13 | 14 | const lockedAmount = ONE_GWEI 15 | const unlockTime = (await time.latest()) + ONE_YEAR_IN_SECS 16 | 17 | // Contracts are deployed using the first signer/account by default 18 | const [owner, otherAccount] = await ethers.getSigners() 19 | 20 | const Lock = await ethers.getContractFactory("Lock") 21 | const lock = await Lock.deploy(unlockTime, { value: lockedAmount }) 22 | 23 | return { lock, unlockTime, lockedAmount, owner, otherAccount } 24 | } 25 | 26 | describe("Deployment", function () { 27 | it("Should set the right unlockTime", async function () { 28 | const { lock, unlockTime } = await loadFixture(deployOneYearLockFixture) 29 | 30 | expect(await lock.unlockTime()).to.equal(unlockTime) 31 | }) 32 | 33 | it("Should set the right owner", async function () { 34 | const { lock, owner } = await loadFixture(deployOneYearLockFixture) 35 | 36 | expect(await lock.owner()).to.equal(owner.address) 37 | }) 38 | 39 | it("Should receive and store the funds to lock", async function () { 40 | const { lock, lockedAmount } = await loadFixture(deployOneYearLockFixture) 41 | 42 | expect(await ethers.provider.getBalance(lock.address)).to.equal(lockedAmount) 43 | }) 44 | 45 | it("Should fail if the unlockTime is not in the future", async function () { 46 | // We don't use the fixture here because we want a different deployment 47 | const latestTime = await time.latest() 48 | const Lock = await ethers.getContractFactory("Lock") 49 | await expect(Lock.deploy(latestTime, { value: 1 })).to.be.revertedWith( 50 | "Unlock time should be in the future" 51 | ) 52 | }) 53 | }) 54 | 55 | describe("Withdrawals", function () { 56 | describe("Validations", function () { 57 | it("Should revert with the right error if called too soon", async function () { 58 | const { lock } = await loadFixture(deployOneYearLockFixture) 59 | 60 | await expect(lock.withdraw()).to.be.revertedWith("You can't withdraw yet") 61 | }) 62 | 63 | it("Should revert with the right error if called from another account", async function () { 64 | const { lock, unlockTime, otherAccount } = await loadFixture( 65 | deployOneYearLockFixture 66 | ) 67 | 68 | // We can increase the time in Hardhat Network 69 | await time.increaseTo(unlockTime) 70 | 71 | // We use lock.connect() to send a transaction from another account 72 | await expect(lock.connect(otherAccount).withdraw()).to.be.revertedWith( 73 | "You aren't the owner" 74 | ) 75 | }) 76 | 77 | it("Shouldn't fail if the unlockTime has arrived and the owner calls it", async function () { 78 | const { lock, unlockTime } = await loadFixture(deployOneYearLockFixture) 79 | 80 | // Transactions are sent using the first signer by default 81 | await time.increaseTo(unlockTime) 82 | 83 | await expect(lock.withdraw()).not.to.be.reverted 84 | }) 85 | }) 86 | 87 | describe("Events", function () { 88 | it("Should emit an event on withdrawals", async function () { 89 | const { lock, unlockTime, lockedAmount } = await loadFixture( 90 | deployOneYearLockFixture 91 | ) 92 | 93 | await time.increaseTo(unlockTime) 94 | 95 | await expect(lock.withdraw()) 96 | .to.emit(lock, "Withdrawal") 97 | .withArgs(lockedAmount, anyValue) // We accept any value as `when` arg 98 | }) 99 | }) 100 | 101 | describe("Transfers", function () { 102 | it("Should transfer the funds to the owner", async function () { 103 | const { lock, unlockTime, lockedAmount, owner } = await loadFixture( 104 | deployOneYearLockFixture 105 | ) 106 | 107 | await time.increaseTo(unlockTime) 108 | 109 | await expect(lock.withdraw()).to.changeEtherBalances( 110 | [owner, lock], 111 | [lockedAmount, -lockedAmount] 112 | ) 113 | }) 114 | }) 115 | }) 116 | }) 117 | -------------------------------------------------------------------------------- /hh-unstoppable/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "commonjs", 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "skipLibCheck": true 9 | }, 10 | "include": ["./hardhat.config.ts", "./scripts", "./deploy", "./test"], 11 | "files": ["./hardhat.config.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /hh-unstoppable/utils/helper-functions.ts: -------------------------------------------------------------------------------- 1 | import { run } from "hardhat" 2 | 3 | 4 | export const verify = async (contractAddress: string, args: any[]) => { 5 | console.log("Verifying contract...") 6 | try { 7 | await run("verify:verify", { 8 | address: contractAddress, 9 | constructorArguments: args, 10 | }) 11 | } catch (e: any) { 12 | if (e.message.toLowerCase().includes("already verified")) { 13 | console.log("Already verified!") 14 | } else { 15 | console.log(e) 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /img/import-ipfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/img/import-ipfs.png -------------------------------------------------------------------------------- /img/ron.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/img/ron.webp -------------------------------------------------------------------------------- /img/upload-ipfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/img/upload-ipfs.png -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | swcMinify: true, 5 | images: { 6 | loader: "akamai", 7 | path: ".", 8 | }, 9 | } 10 | 11 | module.exports = nextConfig 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unstoppable-ui", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint", 10 | "format": "yarn prettier --write .", 11 | "fleek-install": "yarn install --ignore-engines", 12 | "export-ipfs": "yarn next export -o unstoppable-ui-static-export", 13 | "export-relative-links": "yarn next export -o relative-links-output" 14 | }, 15 | "dependencies": { 16 | "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", 17 | "@nomicfoundation/hardhat-network-helpers": "^1.0.4", 18 | "@nomicfoundation/hardhat-toolbox": "^1.0.2", 19 | "@nomiclabs/hardhat-ethers": "^2.1.1", 20 | "@nomiclabs/hardhat-etherscan": "^3.1.0", 21 | "@nomiclabs/hardhat-waffle": "^2.0.3", 22 | "@openzeppelin/contracts": "^4.7.3", 23 | "@typechain/ethers-v5": "^10.1.0", 24 | "@typechain/hardhat": "^6.1.2", 25 | "arkb": "^1.1.60", 26 | "base64-sol": "^1.1.0", 27 | "chai": "^4.3.6", 28 | "hardhat": "^2.10.2", 29 | "hardhat-deploy": "^0.11.12", 30 | "hardhat-gas-reporter": "^1.0.8", 31 | "ipfs-car": "^0.8.1", 32 | "next": "12.2.5", 33 | "react": "18.2.0", 34 | "react-dom": "18.2.0", 35 | "solidity-coverage": "^0.7.21", 36 | "ts-node": "^10.9.1", 37 | "typechain": "^8.1.0" 38 | }, 39 | "devDependencies": { 40 | "@skynetlabs/skynet-nodejs": "^2.8.0", 41 | "@types/node": "18.7.6", 42 | "@types/react": "18.0.17", 43 | "@types/react-dom": "18.0.6", 44 | "eslint": "8.22.0", 45 | "eslint-config-next": "12.2.5", 46 | "prettier": "^2.7.1", 47 | "typescript": "4.7.4" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "../styles/globals.css" 2 | import type { AppProps } from "next/app" 3 | 4 | function MyApp({ Component, pageProps }: AppProps) { 5 | return 6 | } 7 | 8 | export default MyApp 9 | -------------------------------------------------------------------------------- /pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from "next" 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler(req: NextApiRequest, res: NextApiResponse) { 9 | res.status(200).json({ name: "John Doe" }) 10 | } 11 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next" 2 | import Head from "next/head" 3 | import Image from "next/image" 4 | import styles from "../styles/Home.module.css" 5 | import logo from "../public/lily-pad.png" 6 | 7 | const Home: NextPage = () => { 8 | return ( 9 |
10 | 11 | Unstoppable Froge 12 | 13 | 14 | 15 | 16 |
17 |

I am but a humble froge

18 | Froge 19 |

20 | Join the{" "} 21 | 22 | Lily Pad Discord{" "} 23 | 24 | for interacing with other growing web3 devs! 25 |

26 |
27 |
28 | ) 29 | } 30 | 31 | export default Home 32 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/public/favicon.ico -------------------------------------------------------------------------------- /public/frog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/public/frog.png -------------------------------------------------------------------------------- /public/lily-pad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/public/lily-pad.png -------------------------------------------------------------------------------- /relative-links-output/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404: This page could not be found 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
38 |
39 | 59 |

72 | 404 73 |

74 |
83 |

92 | This page could not be found. 93 |

94 |
95 |
96 |
97 |
98 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/chunks/pages/_app-deb173bd80cbaa92.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [888], 3 | { 4 | 6840: function (a, b, c) { 5 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 6 | "/_app", 7 | function () { 8 | return c(7571) 9 | }, 10 | ]) 11 | }, 12 | 7571: function (a, b, c) { 13 | "use strict" 14 | function d(a, b, c) { 15 | return ( 16 | b in a 17 | ? Object.defineProperty(a, b, { 18 | value: c, 19 | enumerable: !0, 20 | configurable: !0, 21 | writable: !0, 22 | }) 23 | : (a[b] = c), 24 | a 25 | ) 26 | } 27 | c.r(b), 28 | c.d(b, { 29 | default: function () { 30 | return f 31 | }, 32 | }) 33 | var e = c(5893) 34 | c(906) 35 | var f = function (a) { 36 | var b = a.Component, 37 | c = a.pageProps 38 | return (0, e.jsx)( 39 | b, 40 | (function (a) { 41 | for (var b = 1; b < arguments.length; b++) { 42 | var c = null != arguments[b] ? arguments[b] : {}, 43 | e = Object.keys(c) 44 | "function" == typeof Object.getOwnPropertySymbols && 45 | (e = e.concat( 46 | Object.getOwnPropertySymbols(c).filter(function (a) { 47 | return Object.getOwnPropertyDescriptor(c, a).enumerable 48 | }) 49 | )), 50 | e.forEach(function (b) { 51 | d(a, b, c[b]) 52 | }) 53 | } 54 | return a 55 | })({}, c) 56 | ) 57 | } 58 | }, 59 | 906: function () {}, 60 | }, 61 | function (a) { 62 | var b = function (b) { 63 | return a((a.s = b)) 64 | } 65 | a.O(0, [774, 179], function () { 66 | return b(6840), b(387) 67 | }), 68 | (_N_E = a.O()) 69 | }, 70 | ]) 71 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/chunks/pages/_error-7397496ca01950b1.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [820], 3 | { 4 | 1981: function (a, b, c) { 5 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 6 | "/_error", 7 | function () { 8 | return c(9185) 9 | }, 10 | ]) 11 | }, 12 | }, 13 | function (a) { 14 | a.O(0, [774, 888, 179], function () { 15 | var b 16 | return a((a.s = 1981)) 17 | }), 18 | (_N_E = a.O()) 19 | }, 20 | ]) 21 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/chunks/pages/index-36b30e9afe032536.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [405], 3 | { 4 | 9361: function (a, b) { 5 | "use strict" 6 | b.Z = function (a, b, c) { 7 | return ( 8 | b in a 9 | ? Object.defineProperty(a, b, { 10 | value: c, 11 | enumerable: !0, 12 | configurable: !0, 13 | writable: !0, 14 | }) 15 | : (a[b] = c), 16 | a 17 | ) 18 | } 19 | }, 20 | 8312: function (a, b, c) { 21 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 22 | "/", 23 | function () { 24 | return c(3752) 25 | }, 26 | ]) 27 | }, 28 | 8045: function (a, b, c) { 29 | "use strict" 30 | Object.defineProperty(b, "__esModule", { value: !0 }) 31 | var d = c(9361).Z, 32 | e = c(4941).Z, 33 | f = c(3929).Z 34 | Object.defineProperty(b, "__esModule", { value: !0 }), 35 | (b.default = function (a) { 36 | var b, 37 | c, 38 | h = a.src, 39 | i = a.sizes, 40 | p = a.unoptimized, 41 | q = void 0 !== p && p, 42 | v = a.priority, 43 | B = void 0 !== v && v, 44 | D = a.loading, 45 | E = a.lazyRoot, 46 | F = void 0 === E ? null : E, 47 | G = a.lazyBoundary, 48 | H = a.className, 49 | I = a.quality, 50 | J = a.width, 51 | K = a.height, 52 | L = a.style, 53 | M = a.objectFit, 54 | N = a.objectPosition, 55 | O = a.onLoadingComplete, 56 | P = a.placeholder, 57 | Q = void 0 === P ? "empty" : P, 58 | R = a.blurDataURL, 59 | S = j(a, [ 60 | "src", 61 | "sizes", 62 | "unoptimized", 63 | "priority", 64 | "loading", 65 | "lazyRoot", 66 | "lazyBoundary", 67 | "className", 68 | "quality", 69 | "width", 70 | "height", 71 | "style", 72 | "objectFit", 73 | "objectPosition", 74 | "onLoadingComplete", 75 | "placeholder", 76 | "blurDataURL", 77 | ]), 78 | T = k.useContext(o.ImageConfigContext), 79 | U = k.useMemo( 80 | function () { 81 | var a = s || T || m.imageConfigDefault, 82 | b = f(a.deviceSizes) 83 | .concat(f(a.imageSizes)) 84 | .sort(function (a, b) { 85 | return a - b 86 | }), 87 | c = a.deviceSizes.sort(function (a, b) { 88 | return a - b 89 | }) 90 | return g({}, a, { allSizes: b, deviceSizes: c }) 91 | }, 92 | [T] 93 | ), 94 | V = S, 95 | W = i ? "responsive" : "intrinsic" 96 | "layout" in V && (V.layout && (W = V.layout), delete V.layout) 97 | var X = A 98 | if ("loader" in V) { 99 | if (V.loader) { 100 | var Y, 101 | Z = V.loader 102 | X = function (a) { 103 | a.config 104 | var b = j(a, ["config"]) 105 | return Z(b) 106 | } 107 | } 108 | delete V.loader 109 | } 110 | var $ = "" 111 | if (x(h)) { 112 | var _ = w(h) ? h.default : h 113 | if (!_.src) 114 | throw Error( 115 | "An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ".concat( 116 | JSON.stringify(_) 117 | ) 118 | ) 119 | if ( 120 | ((R = R || _.blurDataURL), 121 | ($ = _.src), 122 | (!W || "fill" !== W) && 123 | ((K = K || _.height), (J = J || _.width), !_.height || !_.width)) 124 | ) 125 | throw Error( 126 | "An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ".concat( 127 | JSON.stringify(_) 128 | ) 129 | ) 130 | } 131 | h = "string" == typeof h ? h : $ 132 | var aa = !B && ("lazy" === D || void 0 === D) 133 | ;(h.startsWith("data:") || h.startsWith("blob:")) && ((q = !0), (aa = !1)), 134 | t.has(h) && (aa = !1), 135 | r && (q = !0) 136 | var ab = e(k.useState(!1), 2), 137 | ac = ab[0], 138 | ad = ab[1], 139 | ae = e( 140 | n.useIntersection({ 141 | rootRef: F, 142 | rootMargin: G || "200px", 143 | disabled: !aa, 144 | }), 145 | 3 146 | ), 147 | af = ae[0], 148 | ag = ae[1], 149 | ah = ae[2], 150 | ai = !aa || ag, 151 | aj = { 152 | boxSizing: "border-box", 153 | display: "block", 154 | overflow: "hidden", 155 | width: "initial", 156 | height: "initial", 157 | background: "none", 158 | opacity: 1, 159 | border: 0, 160 | margin: 0, 161 | padding: 0, 162 | }, 163 | ak = { 164 | boxSizing: "border-box", 165 | display: "block", 166 | width: "initial", 167 | height: "initial", 168 | background: "none", 169 | opacity: 1, 170 | border: 0, 171 | margin: 0, 172 | padding: 0, 173 | }, 174 | al = !1, 175 | am = z(J), 176 | an = z(K), 177 | ao = z(I), 178 | ap = Object.assign({}, L, { 179 | position: "absolute", 180 | top: 0, 181 | left: 0, 182 | bottom: 0, 183 | right: 0, 184 | boxSizing: "border-box", 185 | padding: 0, 186 | border: "none", 187 | margin: "auto", 188 | display: "block", 189 | width: 0, 190 | height: 0, 191 | minWidth: "100%", 192 | maxWidth: "100%", 193 | minHeight: "100%", 194 | maxHeight: "100%", 195 | objectFit: M, 196 | objectPosition: N, 197 | }), 198 | aq = 199 | "blur" !== Q || ac 200 | ? {} 201 | : { 202 | backgroundSize: M || "cover", 203 | backgroundPosition: N || "0% 0%", 204 | filter: "blur(20px)", 205 | backgroundImage: 'url("'.concat(R, '")'), 206 | } 207 | if ("fill" === W) 208 | (aj.display = "block"), 209 | (aj.position = "absolute"), 210 | (aj.top = 0), 211 | (aj.left = 0), 212 | (aj.bottom = 0), 213 | (aj.right = 0) 214 | else if (void 0 !== am && void 0 !== an) { 215 | var ar = an / am, 216 | as = isNaN(ar) ? "100%" : "".concat(100 * ar, "%") 217 | "responsive" === W 218 | ? ((aj.display = "block"), 219 | (aj.position = "relative"), 220 | (al = !0), 221 | (ak.paddingTop = as)) 222 | : "intrinsic" === W 223 | ? ((aj.display = "inline-block"), 224 | (aj.position = "relative"), 225 | (aj.maxWidth = "100%"), 226 | (al = !0), 227 | (ak.maxWidth = "100%"), 228 | (b = 229 | "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27" 230 | .concat(am, "%27%20height=%27") 231 | .concat(an, "%27/%3e"))) 232 | : "fixed" === W && 233 | ((aj.display = "inline-block"), 234 | (aj.position = "relative"), 235 | (aj.width = am), 236 | (aj.height = an)) 237 | } 238 | var at = { src: u, srcSet: void 0, sizes: void 0 } 239 | ai && 240 | (at = y({ 241 | config: U, 242 | src: h, 243 | unoptimized: q, 244 | layout: W, 245 | width: am, 246 | quality: ao, 247 | sizes: i, 248 | loader: X, 249 | })) 250 | var au = h, 251 | av = "imagesrcset", 252 | aw = "imagesizes" 253 | aw = "imageSizes" 254 | var ax = (d((c = {}), "imageSrcSet", at.srcSet), d(c, aw, at.sizes), c), 255 | ay = k.default.useLayoutEffect, 256 | az = k.useRef(O), 257 | aA = k.useRef(h) 258 | k.useEffect( 259 | function () { 260 | az.current = O 261 | }, 262 | [O] 263 | ), 264 | ay( 265 | function () { 266 | aA.current !== h && (ah(), (aA.current = h)) 267 | }, 268 | [ah, h] 269 | ) 270 | var aB = g( 271 | { 272 | isLazy: aa, 273 | imgAttributes: at, 274 | heightInt: an, 275 | widthInt: am, 276 | qualityInt: ao, 277 | layout: W, 278 | className: H, 279 | imgStyle: ap, 280 | blurStyle: aq, 281 | loading: D, 282 | config: U, 283 | unoptimized: q, 284 | placeholder: Q, 285 | loader: X, 286 | srcString: au, 287 | onLoadingCompleteRef: az, 288 | setBlurComplete: ad, 289 | setIntersection: af, 290 | isVisible: ai, 291 | noscriptSizes: i, 292 | }, 293 | V 294 | ) 295 | return k.default.createElement( 296 | k.default.Fragment, 297 | null, 298 | k.default.createElement( 299 | "span", 300 | { style: aj }, 301 | al 302 | ? k.default.createElement( 303 | "span", 304 | { style: ak }, 305 | b 306 | ? k.default.createElement("img", { 307 | style: { 308 | display: "block", 309 | maxWidth: "100%", 310 | width: "initial", 311 | height: "initial", 312 | background: "none", 313 | opacity: 1, 314 | border: 0, 315 | margin: 0, 316 | padding: 0, 317 | }, 318 | alt: "", 319 | "aria-hidden": !0, 320 | src: b, 321 | }) 322 | : null 323 | ) 324 | : null, 325 | k.default.createElement(C, Object.assign({}, aB)) 326 | ), 327 | B 328 | ? k.default.createElement( 329 | l.default, 330 | null, 331 | k.default.createElement( 332 | "link", 333 | Object.assign( 334 | { 335 | key: "__nimg-" + at.src + at.srcSet + at.sizes, 336 | rel: "preload", 337 | as: "image", 338 | href: at.srcSet ? void 0 : at.src, 339 | }, 340 | ax 341 | ) 342 | ) 343 | ) 344 | : null 345 | ) 346 | }) 347 | var g = c(6495).Z, 348 | h = c(2648).Z, 349 | i = c(1598).Z, 350 | j = c(7273).Z, 351 | k = i(c(7294)), 352 | l = h(c(5443)), 353 | m = c(9309), 354 | n = c(7190), 355 | o = c(9977) 356 | c(3794) 357 | var p = c(2392), 358 | q = { 359 | deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 360 | imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], 361 | path: "./", 362 | loader: "akamai", 363 | dangerouslyAllowSVG: !1, 364 | }, 365 | r = (q.experimentalRemotePatterns, q.experimentalUnoptimized), 366 | s = { 367 | deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 368 | imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], 369 | path: "./", 370 | loader: "akamai", 371 | dangerouslyAllowSVG: !1, 372 | }, 373 | t = new Set(), 374 | u = 375 | "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", 376 | v = new Map([ 377 | [ 378 | "default", 379 | function (a) { 380 | var b = a.config, 381 | c = a.src, 382 | d = a.width, 383 | e = a.quality 384 | return c.endsWith(".svg") && !b.dangerouslyAllowSVG 385 | ? c 386 | : "" 387 | .concat(p.normalizePathTrailingSlash(b.path), "?url=") 388 | .concat(encodeURIComponent(c), "&w=") 389 | .concat(d, "&q=") 390 | .concat(e || 75) 391 | }, 392 | ], 393 | [ 394 | "imgix", 395 | function (a) { 396 | var b = a.config, 397 | c = a.src, 398 | d = a.width, 399 | e = a.quality, 400 | f = new URL("".concat(b.path).concat(D(c))), 401 | g = f.searchParams 402 | return ( 403 | g.set("auto", g.getAll("auto").join(",") || "format"), 404 | g.set("fit", g.get("fit") || "max"), 405 | g.set("w", g.get("w") || d.toString()), 406 | e && g.set("q", e.toString()), 407 | f.href 408 | ) 409 | }, 410 | ], 411 | [ 412 | "cloudinary", 413 | function (a) { 414 | var b = a.config, 415 | c = a.src, 416 | d = a.width, 417 | e = a.quality, 418 | f = 419 | ["f_auto", "c_limit", "w_" + d, "q_" + (e || "auto")].join( 420 | "," 421 | ) + "/" 422 | return "".concat(b.path).concat(f).concat(D(c)) 423 | }, 424 | ], 425 | [ 426 | "akamai", 427 | function (a) { 428 | var b = a.config, 429 | c = a.src, 430 | d = a.width 431 | return "".concat(b.path).concat(D(c), "?imwidth=").concat(d) 432 | }, 433 | ], 434 | [ 435 | "custom", 436 | function (a) { 437 | var b = a.src 438 | throw Error( 439 | 'Image with src "'.concat(b, '" is missing "loader" prop.') + 440 | "\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader" 441 | ) 442 | }, 443 | ], 444 | ]) 445 | function w(a) { 446 | return void 0 !== a.default 447 | } 448 | function x(a) { 449 | var b 450 | return "object" == typeof a && (w(a) || void 0 !== (b = a).src) 451 | } 452 | function y(a) { 453 | var b = a.config, 454 | c = a.src, 455 | d = a.unoptimized, 456 | e = a.layout, 457 | g = a.width, 458 | h = a.quality, 459 | i = a.sizes, 460 | j = a.loader 461 | if (d) return { src: c, srcSet: void 0, sizes: void 0 } 462 | var k = (function (a, b, c, d) { 463 | var e = a.deviceSizes, 464 | g = a.allSizes 465 | if (d && ("fill" === c || "responsive" === c)) { 466 | for (var h = /(^|\s)(1?\d?\d)vw/g, i = []; (j = h.exec(d)); j) 467 | i.push(parseInt(j[2])) 468 | if (i.length) { 469 | var j, 470 | k, 471 | l = 0.01 * (k = Math).min.apply(k, f(i)) 472 | return { 473 | widths: g.filter(function (a) { 474 | return a >= e[0] * l 475 | }), 476 | kind: "w", 477 | } 478 | } 479 | return { widths: g, kind: "w" } 480 | } 481 | return "number" != typeof b || "fill" === c || "responsive" === c 482 | ? { widths: e, kind: "w" } 483 | : { 484 | widths: f( 485 | new Set( 486 | [b, 2 * b].map(function (a) { 487 | return ( 488 | g.find(function (b) { 489 | return b >= a 490 | }) || g[g.length - 1] 491 | ) 492 | }) 493 | ) 494 | ), 495 | kind: "x", 496 | } 497 | })(b, g, e, i), 498 | l = k.widths, 499 | m = k.kind, 500 | n = l.length - 1 501 | return { 502 | sizes: i || "w" !== m ? i : "100vw", 503 | srcSet: l 504 | .map(function (a, d) { 505 | return "" 506 | .concat(j({ config: b, src: c, quality: h, width: a }), " ") 507 | .concat("w" === m ? a : d + 1) 508 | .concat(m) 509 | }) 510 | .join(", "), 511 | src: j({ config: b, src: c, quality: h, width: l[n] }), 512 | } 513 | } 514 | function z(a) { 515 | return "number" == typeof a ? a : "string" == typeof a ? parseInt(a, 10) : void 0 516 | } 517 | function A(a) { 518 | var b, 519 | c = (null == (b = a.config) ? void 0 : b.loader) || "default", 520 | d = v.get(c) 521 | if (d) return d(a) 522 | throw Error( 523 | 'Unknown "loader" found in "next.config.js". Expected: ' 524 | .concat(m.VALID_LOADERS.join(", "), ". Received: ") 525 | .concat(c) 526 | ) 527 | } 528 | function B(a, b, c, d, e, f) { 529 | a && 530 | a.src !== u && 531 | a["data-loaded-src"] !== b && 532 | ((a["data-loaded-src"] = b), 533 | ("decode" in a ? a.decode() : Promise.resolve()) 534 | .catch(function () {}) 535 | .then(function () { 536 | if ( 537 | a.parentNode && 538 | (t.add(b), "blur" === d && f(!0), null == e ? void 0 : e.current) 539 | ) { 540 | var c = a.naturalWidth, 541 | g = a.naturalHeight 542 | e.current({ naturalWidth: c, naturalHeight: g }) 543 | } 544 | })) 545 | } 546 | var C = function (a) { 547 | var b = a.imgAttributes, 548 | c = (a.heightInt, a.widthInt), 549 | d = a.qualityInt, 550 | e = a.layout, 551 | f = a.className, 552 | h = a.imgStyle, 553 | i = a.blurStyle, 554 | l = a.isLazy, 555 | m = a.placeholder, 556 | n = a.loading, 557 | o = a.srcString, 558 | p = a.config, 559 | q = a.unoptimized, 560 | r = a.loader, 561 | s = a.onLoadingCompleteRef, 562 | t = a.setBlurComplete, 563 | u = a.setIntersection, 564 | v = a.onLoad, 565 | w = a.onError, 566 | x = (a.isVisible, a.noscriptSizes), 567 | z = j(a, [ 568 | "imgAttributes", 569 | "heightInt", 570 | "widthInt", 571 | "qualityInt", 572 | "layout", 573 | "className", 574 | "imgStyle", 575 | "blurStyle", 576 | "isLazy", 577 | "placeholder", 578 | "loading", 579 | "srcString", 580 | "config", 581 | "unoptimized", 582 | "loader", 583 | "onLoadingCompleteRef", 584 | "setBlurComplete", 585 | "setIntersection", 586 | "onLoad", 587 | "onError", 588 | "isVisible", 589 | "noscriptSizes", 590 | ]) 591 | return ( 592 | (n = l ? "lazy" : n), 593 | k.default.createElement( 594 | k.default.Fragment, 595 | null, 596 | k.default.createElement( 597 | "img", 598 | Object.assign({}, z, b, { 599 | decoding: "async", 600 | "data-nimg": e, 601 | className: f, 602 | style: g({}, h, i), 603 | ref: k.useCallback( 604 | function (a) { 605 | u(a), 606 | (null == a ? void 0 : a.complete) && B(a, o, e, m, s, t) 607 | }, 608 | [u, o, e, m, s, t] 609 | ), 610 | onLoad: function (a) { 611 | B(a.currentTarget, o, e, m, s, t), v && v(a) 612 | }, 613 | onError: function (a) { 614 | "blur" === m && t(!0), w && w(a) 615 | }, 616 | }) 617 | ), 618 | (l || "blur" === m) && 619 | k.default.createElement( 620 | "noscript", 621 | null, 622 | k.default.createElement( 623 | "img", 624 | Object.assign( 625 | {}, 626 | z, 627 | y({ 628 | config: p, 629 | src: o, 630 | unoptimized: q, 631 | layout: e, 632 | width: c, 633 | quality: d, 634 | sizes: x, 635 | loader: r, 636 | }), 637 | { 638 | decoding: "async", 639 | "data-nimg": e, 640 | style: h, 641 | className: f, 642 | loading: n, 643 | } 644 | ) 645 | ) 646 | ) 647 | ) 648 | ) 649 | } 650 | function D(a) { 651 | return "/" === a[0] ? a.slice(1) : a 652 | } 653 | ;("function" == typeof b.default || 654 | ("object" == typeof b.default && null !== b.default)) && 655 | void 0 === b.default.__esModule && 656 | (Object.defineProperty(b.default, "__esModule", { value: !0 }), 657 | Object.assign(b.default, b), 658 | (a.exports = b.default)) 659 | }, 660 | 7190: function (a, b, c) { 661 | "use strict" 662 | Object.defineProperty(b, "__esModule", { value: !0 }) 663 | var d = c(4941).Z 664 | Object.defineProperty(b, "__esModule", { value: !0 }), 665 | (b.useIntersection = function (a) { 666 | var b = a.rootRef, 667 | c = a.rootMargin, 668 | h = a.disabled || !g, 669 | i = e.useRef(), 670 | k = d(e.useState(!1), 2), 671 | l = k[0], 672 | m = k[1], 673 | n = d(e.useState(null), 2), 674 | o = n[0], 675 | p = n[1] 676 | e.useEffect( 677 | function () { 678 | if (g) { 679 | if ((i.current && (i.current(), (i.current = void 0)), !h && !l)) 680 | return ( 681 | o && 682 | o.tagName && 683 | (i.current = j( 684 | o, 685 | function (a) { 686 | return a && m(a) 687 | }, 688 | { 689 | root: null == b ? void 0 : b.current, 690 | rootMargin: c, 691 | } 692 | )), 693 | function () { 694 | null == i.current || i.current(), (i.current = void 0) 695 | } 696 | ) 697 | } else if (!l) { 698 | var a = f.requestIdleCallback(function () { 699 | return m(!0) 700 | }) 701 | return function () { 702 | return f.cancelIdleCallback(a) 703 | } 704 | } 705 | }, 706 | [o, h, c, b, l] 707 | ) 708 | var q = e.useCallback(function () { 709 | m(!1) 710 | }, []) 711 | return [p, l, q] 712 | }) 713 | var e = c(7294), 714 | f = c(9311), 715 | g = "function" == typeof IntersectionObserver, 716 | h = new Map(), 717 | i = [] 718 | function j(a, b, c) { 719 | var d = k(c), 720 | e = d.id, 721 | f = d.observer, 722 | g = d.elements 723 | return ( 724 | g.set(a, b), 725 | f.observe(a), 726 | function () { 727 | if ((g.delete(a), f.unobserve(a), 0 === g.size)) { 728 | f.disconnect(), h.delete(e) 729 | var b = i.findIndex(function (a) { 730 | return a.root === e.root && a.margin === e.margin 731 | }) 732 | b > -1 && i.splice(b, 1) 733 | } 734 | } 735 | ) 736 | } 737 | function k(a) { 738 | var b, 739 | c = { root: a.root || null, margin: a.rootMargin || "" }, 740 | d = i.find(function (a) { 741 | return a.root === c.root && a.margin === c.margin 742 | }) 743 | if (d && (b = h.get(d))) return b 744 | var e = new Map(), 745 | f = new IntersectionObserver(function (a) { 746 | a.forEach(function (a) { 747 | var b = e.get(a.target), 748 | c = a.isIntersecting || a.intersectionRatio > 0 749 | b && c && b(c) 750 | }) 751 | }, a) 752 | return (b = { id: c, observer: f, elements: e }), i.push(c), h.set(c, b), b 753 | } 754 | ;("function" == typeof b.default || 755 | ("object" == typeof b.default && null !== b.default)) && 756 | void 0 === b.default.__esModule && 757 | (Object.defineProperty(b.default, "__esModule", { value: !0 }), 758 | Object.assign(b.default, b), 759 | (a.exports = b.default)) 760 | }, 761 | 3752: function (a, b, c) { 762 | "use strict" 763 | c.r(b), 764 | c.d(b, { 765 | default: function () { 766 | return m 767 | }, 768 | }) 769 | var d = c(5893), 770 | e = c(9008), 771 | f = c.n(e), 772 | g = c(5675), 773 | h = c.n(g), 774 | i = c(214), 775 | j = c.n(i), 776 | k = { 777 | src: "/_next/static/media/lily-pad.c7df30b2.png", 778 | height: 500, 779 | width: 500, 780 | blurDataURL: 781 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAA6klEQVR42mOAgFI5BpYCWwYYYCqwZmAol4VxeaY0M1zOSM3+xaAUs4NBIXpTekrOT5AYSA6I7YU7a4w+Z2bV/Df0aPqv7974PzO77n9HtcVPBgZfaQa1CB8/Rvfy3/aBU/4HJM//E5C84I9TyPR/7O6V/zUjQyIYPBqqN9nnlPw38qr4oe9U+k/PsfSfqU/VD9usov9utRUbGFK7p7FbFmacSFi/4r/Xghn/vRfN/B+/bvl/y/z0o/ndc1kZQEDVOVDQq7Fupd+UCa/8p0185dPatFJE00GAAQSsstOZGRBABIhFYRzTlARmADU0VsVrWVOvAAAAAElFTkSuQmCC", 782 | }, 783 | l = function () { 784 | return (0, d.jsxs)("div", { 785 | className: j().container, 786 | children: [ 787 | (0, d.jsxs)(f(), { 788 | children: [ 789 | (0, d.jsx)("title", { children: "Unstoppable Froge" }), 790 | (0, d.jsx)("meta", { 791 | name: "description", 792 | content: "Just a humble froge", 793 | }), 794 | (0, d.jsx)("link", { rel: "icon", href: "/favicon.ico" }), 795 | ], 796 | }), 797 | (0, d.jsxs)("main", { 798 | className: j().main, 799 | children: [ 800 | (0, d.jsx)("p", { children: "I am but a humble froge" }), 801 | (0, d.jsx)(h(), { src: k, alt: "Froge" }), 802 | (0, d.jsxs)("p", { 803 | children: [ 804 | "Join the", 805 | " ", 806 | (0, d.jsxs)("a", { 807 | className: j().link, 808 | href: "https://discord.gg/FJvECDTpjp", 809 | children: ["Lily Pad Discord", " "], 810 | }), 811 | "for interacing with other growing web3 devs!", 812 | ], 813 | }), 814 | ], 815 | }), 816 | ], 817 | }) 818 | }, 819 | m = l 820 | }, 821 | 214: function (a) { 822 | a.exports = { 823 | container: "Home_container__bCOhY", 824 | main: "Home_main__nLjiQ", 825 | footer: "Home_footer____T7K", 826 | title: "Home_title__T09hD", 827 | description: "Home_description__41Owk", 828 | code: "Home_code__suPER", 829 | grid: "Home_grid__GxQ85", 830 | card: "Home_card___LpL1", 831 | logo: "Home_logo__27_tb", 832 | link: "Home_link__mt0ji", 833 | } 834 | }, 835 | 9008: function (a, b, c) { 836 | a.exports = c(5443) 837 | }, 838 | 5675: function (a, b, c) { 839 | a.exports = c(8045) 840 | }, 841 | }, 842 | function (a) { 843 | a.O(0, [774, 888, 179], function () { 844 | var b 845 | return a((a.s = 8312)) 846 | }), 847 | (_N_E = a.O()) 848 | }, 849 | ]) 850 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/chunks/webpack-7ee66019f7f6d30f.js: -------------------------------------------------------------------------------- 1 | !(function () { 2 | "use strict" 3 | var a, 4 | b, 5 | c, 6 | d, 7 | e = {}, 8 | f = {} 9 | function g(a) { 10 | var b = f[a] 11 | if (void 0 !== b) return b.exports 12 | var c = (f[a] = { exports: {} }), 13 | d = !0 14 | try { 15 | e[a](c, c.exports, g), (d = !1) 16 | } finally { 17 | d && delete f[a] 18 | } 19 | return c.exports 20 | } 21 | ;(g.m = e), 22 | (a = []), 23 | (g.O = function (b, c, d, e) { 24 | if (c) { 25 | e = e || 0 26 | for (var f = a.length; f > 0 && a[f - 1][2] > e; f--) a[f] = a[f - 1] 27 | a[f] = [c, d, e] 28 | return 29 | } 30 | for (var h = 1 / 0, f = 0; f < a.length; f++) { 31 | for (var c = a[f][0], d = a[f][1], e = a[f][2], i = !0, j = 0; j < c.length; j++) 32 | h >= e && 33 | Object.keys(g.O).every(function (a) { 34 | return g.O[a](c[j]) 35 | }) 36 | ? c.splice(j--, 1) 37 | : ((i = !1), e < h && (h = e)) 38 | if (i) { 39 | a.splice(f--, 1) 40 | var k = d() 41 | void 0 !== k && (b = k) 42 | } 43 | } 44 | return b 45 | }), 46 | (g.n = function (a) { 47 | var b = 48 | a && a.__esModule 49 | ? function () { 50 | return a.default 51 | } 52 | : function () { 53 | return a 54 | } 55 | return g.d(b, { a: b }), b 56 | }), 57 | (g.d = function (a, b) { 58 | for (var c in b) 59 | g.o(b, c) && 60 | !g.o(a, c) && 61 | Object.defineProperty(a, c, { enumerable: !0, get: b[c] }) 62 | }), 63 | (g.o = function (a, b) { 64 | return Object.prototype.hasOwnProperty.call(a, b) 65 | }), 66 | (g.r = function (a) { 67 | "undefined" != typeof Symbol && 68 | Symbol.toStringTag && 69 | Object.defineProperty(a, Symbol.toStringTag, { value: "Module" }), 70 | Object.defineProperty(a, "__esModule", { value: !0 }) 71 | }), 72 | (g.p = "/_next/"), 73 | (b = { 272: 0 }), 74 | (g.O.j = function (a) { 75 | return 0 === b[a] 76 | }), 77 | (c = function (a, c) { 78 | var d, 79 | e, 80 | f = c[0], 81 | h = c[1], 82 | i = c[2], 83 | j = 0 84 | if ( 85 | f.some(function (a) { 86 | return 0 !== b[a] 87 | }) 88 | ) { 89 | for (d in h) g.o(h, d) && (g.m[d] = h[d]) 90 | if (i) var k = i(g) 91 | } 92 | for (a && a(c); j < f.length; j++) 93 | (e = f[j]), g.o(b, e) && b[e] && b[e][0](), (b[e] = 0) 94 | return g.O(k) 95 | }), 96 | (d = self.webpackChunk_N_E = self.webpackChunk_N_E || []).forEach(c.bind(null, 0)), 97 | (d.push = c.bind(null, d.push.bind(d))) 98 | })() 99 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/css/ab44ce7add5c3d11.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, 6 | Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | a { 9 | color: inherit; 10 | text-decoration: none; 11 | } 12 | * { 13 | box-sizing: border-box; 14 | } 15 | @media (prefers-color-scheme: dark) { 16 | html { 17 | color-scheme: dark; 18 | } 19 | body { 20 | color: #fff; 21 | background: #000; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/css/f49f07195cf978c4.css: -------------------------------------------------------------------------------- 1 | .Home_container__bCOhY { 2 | padding: 0 2rem; 3 | } 4 | .Home_main__nLjiQ { 5 | min-height: 100vh; 6 | padding: 4rem 0; 7 | flex: 1 1; 8 | flex-direction: column; 9 | } 10 | .Home_footer____T7K, 11 | .Home_main__nLjiQ { 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | } 16 | .Home_footer____T7K { 17 | flex: 1 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | } 21 | .Home_footer____T7K a { 22 | display: flex; 23 | justify-content: center; 24 | align-items: center; 25 | flex-grow: 1; 26 | } 27 | .Home_title__T09hD a { 28 | color: #0070f3; 29 | text-decoration: none; 30 | } 31 | .Home_title__T09hD a:active, 32 | .Home_title__T09hD a:focus, 33 | .Home_title__T09hD a:hover { 34 | text-decoration: underline; 35 | } 36 | .Home_title__T09hD { 37 | margin: 0; 38 | line-height: 1.15; 39 | font-size: 4rem; 40 | } 41 | .Home_description__41Owk, 42 | .Home_title__T09hD { 43 | text-align: center; 44 | } 45 | .Home_description__41Owk { 46 | margin: 4rem 0; 47 | line-height: 1.5; 48 | font-size: 1.5rem; 49 | } 50 | .Home_code__suPER { 51 | background: #fafafa; 52 | border-radius: 5px; 53 | padding: 0.75rem; 54 | font-size: 1.1rem; 55 | font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, 56 | Bitstream Vera Sans Mono, Courier New, monospace; 57 | } 58 | .Home_grid__GxQ85 { 59 | display: flex; 60 | align-items: center; 61 | justify-content: center; 62 | flex-wrap: wrap; 63 | max-width: 800px; 64 | } 65 | .Home_card___LpL1 { 66 | margin: 1rem; 67 | padding: 1.5rem; 68 | text-align: left; 69 | color: inherit; 70 | text-decoration: none; 71 | border: 1px solid #eaeaea; 72 | border-radius: 10px; 73 | transition: color 0.15s ease, border-color 0.15s ease; 74 | max-width: 300px; 75 | } 76 | .Home_card___LpL1:active, 77 | .Home_card___LpL1:focus, 78 | .Home_card___LpL1:hover { 79 | color: #0070f3; 80 | border-color: #0070f3; 81 | } 82 | .Home_card___LpL1 h2 { 83 | margin: 0 0 1rem; 84 | font-size: 1.5rem; 85 | } 86 | .Home_card___LpL1 p { 87 | margin: 0; 88 | font-size: 1.25rem; 89 | line-height: 1.5; 90 | } 91 | .Home_logo__27_tb { 92 | height: 1em; 93 | margin-left: 0.5rem; 94 | } 95 | .Home_link__mt0ji { 96 | color: blue; 97 | } 98 | @media (max-width: 600px) { 99 | .Home_grid__GxQ85 { 100 | width: 100%; 101 | flex-direction: column; 102 | } 103 | } 104 | @media (prefers-color-scheme: dark) { 105 | .Home_card___LpL1, 106 | .Home_footer____T7K { 107 | border-color: #222; 108 | } 109 | .Home_code__suPER { 110 | background: #111; 111 | } 112 | .Home_logo__27_tb img { 113 | filter: invert(1); 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/media/lily-pad.c7df30b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/relative-links-output/_next/static/media/lily-pad.c7df30b2.png -------------------------------------------------------------------------------- /relative-links-output/_next/static/txOYopp3gUbVMfgCziGxY/_buildManifest.js: -------------------------------------------------------------------------------- 1 | ;(self.__BUILD_MANIFEST = { 2 | __rewrites: { beforeFiles: [], afterFiles: [], fallback: [] }, 3 | "/": ["static/css/f49f07195cf978c4.css", "static/chunks/pages/index-36b30e9afe032536.js"], 4 | "/_error": ["static/chunks/pages/_error-7397496ca01950b1.js"], 5 | sortedPages: ["/", "/_app", "/_error"], 6 | }), 7 | self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() 8 | -------------------------------------------------------------------------------- /relative-links-output/_next/static/txOYopp3gUbVMfgCziGxY/_ssgManifest.js: -------------------------------------------------------------------------------- 1 | ;(self.__SSG_MANIFEST = new Set()), self.__SSG_MANIFEST_CB && self.__SSG_MANIFEST_CB() 2 | -------------------------------------------------------------------------------- /relative-links-output/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/relative-links-output/favicon.ico -------------------------------------------------------------------------------- /relative-links-output/frog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/relative-links-output/frog.png -------------------------------------------------------------------------------- /relative-links-output/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Unstoppable Froge 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |

I am but a humble froge

33 | Froge 128 |

129 | Join the 130 | Lily Pad Discord for interacing with other growing web3 devs! 133 |

134 |
135 |
136 |
137 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /relative-links-output/lily-pad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/relative-links-output/lily-pad.png -------------------------------------------------------------------------------- /relative-links-output/manifest.arkb: -------------------------------------------------------------------------------- 1 | {"manifest":"arweave/paths","version":"0.1.0","index":{"path":"index.html"},"paths":{"favicon.ico":{"id":"GiAdxwEo0UYHuR0sJ3m8cMf04mZAO-LJbmmScBR01zE"},"frog.png":{"id":"GiAdxwEo0UYHuR0sJ3m8cMf04mZAO-LJbmmScBR01zE"},"index.html":{"id":"UQ6udEFgHa0a2yHCZpznm-DWX6LXAQFdi2Dhl7dLhPo"},"lily-pad.png":{"id":"hx7PlDimQHA8EZCvSD21VWpd4Y6nXn-nVnbjOSskX9I"},"_next/static/chunks/framework-db825bd0b4ae01ef.js":{"id":"MEHzWViba37y5itCQPjNwm3Db-6M8KKtB9ZsUY9yAo4"},"_next/static/chunks/main-5fea2acfd5d9e895.js":{"id":"Dw8wFIQTEF53tytR-K92M8SzdlCwlNTyvR4H171_O6w"},"_next/static/chunks/polyfills-c67a75d1b6f99dc8.js":{"id":"8bfyw3HqACPfAVTkmlLS1BqXYFnnjT4keZNDTLQh1bs"},"_next/static/chunks/webpack-7ee66019f7f6d30f.js":{"id":"fJRVN6r8047Jor3PWs7iJod8rO1tF0clChaZeFHi3SI"},"_next/static/css/ab44ce7add5c3d11.css":{"id":"q892hLHAGRprNHyThnGHPIUe32KO0UXKoTvaQgrl2A0"},"_next/static/css/f49f07195cf978c4.css":{"id":"yvvdk27T9_MD3o1ZvLsg0jWIExRXjjZXOGIxFaA2eLs"},"_next/static/media/lily-pad.c7df30b2.png":{"id":"hx7PlDimQHA8EZCvSD21VWpd4Y6nXn-nVnbjOSskX9I"},"_next/static/txOYopp3gUbVMfgCziGxY/_buildManifest.js":{"id":"jkhYZgSvD3F0JAb7Hql5-dbW1K70y1GVsStt-8oAF24"},"_next/static/txOYopp3gUbVMfgCziGxY/_ssgManifest.js":{"id":"uOv7BrashIOKd1ftekpQO-EihKDY_1kREcTyRPX4yt4"},"_next/static/chunks/pages/_app-deb173bd80cbaa92.js":{"id":"WSLZlqFi2oxAOaixWotzGVXwbyDXBJkHN4cZvRqfdyU"},"_next/static/chunks/pages/_error-7397496ca01950b1.js":{"id":"sQPCTwVBljjjS1k_quEXu8nzfqEIgeBvQ5By3NjsFp4"},"_next/static/chunks/pages/index-36b30e9afe032536.js":{"id":"w_fOd6xUxg18g4RomZu7mdRNnKwGZb_4aR99zo_QMr8"},"404.html":{"id":"MKtVEuVXp9gvL7fkPWZCyJVwRnwOIE041OoAYg9r15A"}}} -------------------------------------------------------------------------------- /static-output.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/static-output.car -------------------------------------------------------------------------------- /styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 0 2rem; 3 | } 4 | 5 | .main { 6 | min-height: 100vh; 7 | padding: 4rem 0; 8 | flex: 1; 9 | display: flex; 10 | flex-direction: column; 11 | justify-content: center; 12 | align-items: center; 13 | } 14 | 15 | .footer { 16 | display: flex; 17 | flex: 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | justify-content: center; 21 | align-items: center; 22 | } 23 | 24 | .footer a { 25 | display: flex; 26 | justify-content: center; 27 | align-items: center; 28 | flex-grow: 1; 29 | } 30 | 31 | .title a { 32 | color: #0070f3; 33 | text-decoration: none; 34 | } 35 | 36 | .title a:hover, 37 | .title a:focus, 38 | .title a:active { 39 | text-decoration: underline; 40 | } 41 | 42 | .title { 43 | margin: 0; 44 | line-height: 1.15; 45 | font-size: 4rem; 46 | } 47 | 48 | .title, 49 | .description { 50 | text-align: center; 51 | } 52 | 53 | .description { 54 | margin: 4rem 0; 55 | line-height: 1.5; 56 | font-size: 1.5rem; 57 | } 58 | 59 | .code { 60 | background: #fafafa; 61 | border-radius: 5px; 62 | padding: 0.75rem; 63 | font-size: 1.1rem; 64 | font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, 65 | Bitstream Vera Sans Mono, Courier New, monospace; 66 | } 67 | 68 | .grid { 69 | display: flex; 70 | align-items: center; 71 | justify-content: center; 72 | flex-wrap: wrap; 73 | max-width: 800px; 74 | } 75 | 76 | .card { 77 | margin: 1rem; 78 | padding: 1.5rem; 79 | text-align: left; 80 | color: inherit; 81 | text-decoration: none; 82 | border: 1px solid #eaeaea; 83 | border-radius: 10px; 84 | transition: color 0.15s ease, border-color 0.15s ease; 85 | max-width: 300px; 86 | } 87 | 88 | .card:hover, 89 | .card:focus, 90 | .card:active { 91 | color: #0070f3; 92 | border-color: #0070f3; 93 | } 94 | 95 | .card h2 { 96 | margin: 0 0 1rem 0; 97 | font-size: 1.5rem; 98 | } 99 | 100 | .card p { 101 | margin: 0; 102 | font-size: 1.25rem; 103 | line-height: 1.5; 104 | } 105 | 106 | .logo { 107 | height: 1em; 108 | margin-left: 0.5rem; 109 | } 110 | 111 | .link { 112 | color: blue; 113 | } 114 | 115 | @media (max-width: 600px) { 116 | .grid { 117 | width: 100%; 118 | flex-direction: column; 119 | } 120 | } 121 | 122 | @media (prefers-color-scheme: dark) { 123 | .card, 124 | .footer { 125 | border-color: #222; 126 | } 127 | .code { 128 | background: #111; 129 | } 130 | .logo img { 131 | filter: invert(1); 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, 6 | Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | 18 | @media (prefers-color-scheme: dark) { 19 | html { 20 | color-scheme: dark; 21 | } 22 | body { 23 | color: white; 24 | background: black; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404: This page could not be found 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
38 |
39 | 59 |

72 | 404 73 |

74 |
83 |

92 | This page could not be found. 93 |

94 |
95 |
96 |
97 |
98 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/chunks/pages/_app-deb173bd80cbaa92.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [888], 3 | { 4 | 6840: function (a, b, c) { 5 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 6 | "/_app", 7 | function () { 8 | return c(7571) 9 | }, 10 | ]) 11 | }, 12 | 7571: function (a, b, c) { 13 | "use strict" 14 | function d(a, b, c) { 15 | return ( 16 | b in a 17 | ? Object.defineProperty(a, b, { 18 | value: c, 19 | enumerable: !0, 20 | configurable: !0, 21 | writable: !0, 22 | }) 23 | : (a[b] = c), 24 | a 25 | ) 26 | } 27 | c.r(b), 28 | c.d(b, { 29 | default: function () { 30 | return f 31 | }, 32 | }) 33 | var e = c(5893) 34 | c(906) 35 | var f = function (a) { 36 | var b = a.Component, 37 | c = a.pageProps 38 | return (0, e.jsx)( 39 | b, 40 | (function (a) { 41 | for (var b = 1; b < arguments.length; b++) { 42 | var c = null != arguments[b] ? arguments[b] : {}, 43 | e = Object.keys(c) 44 | "function" == typeof Object.getOwnPropertySymbols && 45 | (e = e.concat( 46 | Object.getOwnPropertySymbols(c).filter(function (a) { 47 | return Object.getOwnPropertyDescriptor(c, a).enumerable 48 | }) 49 | )), 50 | e.forEach(function (b) { 51 | d(a, b, c[b]) 52 | }) 53 | } 54 | return a 55 | })({}, c) 56 | ) 57 | } 58 | }, 59 | 906: function () {}, 60 | }, 61 | function (a) { 62 | var b = function (b) { 63 | return a((a.s = b)) 64 | } 65 | a.O(0, [774, 179], function () { 66 | return b(6840), b(387) 67 | }), 68 | (_N_E = a.O()) 69 | }, 70 | ]) 71 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/chunks/pages/_error-7397496ca01950b1.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [820], 3 | { 4 | 1981: function (a, b, c) { 5 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 6 | "/_error", 7 | function () { 8 | return c(9185) 9 | }, 10 | ]) 11 | }, 12 | }, 13 | function (a) { 14 | a.O(0, [774, 888, 179], function () { 15 | var b 16 | return a((a.s = 1981)) 17 | }), 18 | (_N_E = a.O()) 19 | }, 20 | ]) 21 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/chunks/pages/index-36b30e9afe032536.js: -------------------------------------------------------------------------------- 1 | ;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ 2 | [405], 3 | { 4 | 9361: function (a, b) { 5 | "use strict" 6 | b.Z = function (a, b, c) { 7 | return ( 8 | b in a 9 | ? Object.defineProperty(a, b, { 10 | value: c, 11 | enumerable: !0, 12 | configurable: !0, 13 | writable: !0, 14 | }) 15 | : (a[b] = c), 16 | a 17 | ) 18 | } 19 | }, 20 | 8312: function (a, b, c) { 21 | ;(window.__NEXT_P = window.__NEXT_P || []).push([ 22 | "/", 23 | function () { 24 | return c(3752) 25 | }, 26 | ]) 27 | }, 28 | 8045: function (a, b, c) { 29 | "use strict" 30 | Object.defineProperty(b, "__esModule", { value: !0 }) 31 | var d = c(9361).Z, 32 | e = c(4941).Z, 33 | f = c(3929).Z 34 | Object.defineProperty(b, "__esModule", { value: !0 }), 35 | (b.default = function (a) { 36 | var b, 37 | c, 38 | h = a.src, 39 | i = a.sizes, 40 | p = a.unoptimized, 41 | q = void 0 !== p && p, 42 | v = a.priority, 43 | B = void 0 !== v && v, 44 | D = a.loading, 45 | E = a.lazyRoot, 46 | F = void 0 === E ? null : E, 47 | G = a.lazyBoundary, 48 | H = a.className, 49 | I = a.quality, 50 | J = a.width, 51 | K = a.height, 52 | L = a.style, 53 | M = a.objectFit, 54 | N = a.objectPosition, 55 | O = a.onLoadingComplete, 56 | P = a.placeholder, 57 | Q = void 0 === P ? "empty" : P, 58 | R = a.blurDataURL, 59 | S = j(a, [ 60 | "src", 61 | "sizes", 62 | "unoptimized", 63 | "priority", 64 | "loading", 65 | "lazyRoot", 66 | "lazyBoundary", 67 | "className", 68 | "quality", 69 | "width", 70 | "height", 71 | "style", 72 | "objectFit", 73 | "objectPosition", 74 | "onLoadingComplete", 75 | "placeholder", 76 | "blurDataURL", 77 | ]), 78 | T = k.useContext(o.ImageConfigContext), 79 | U = k.useMemo( 80 | function () { 81 | var a = s || T || m.imageConfigDefault, 82 | b = f(a.deviceSizes) 83 | .concat(f(a.imageSizes)) 84 | .sort(function (a, b) { 85 | return a - b 86 | }), 87 | c = a.deviceSizes.sort(function (a, b) { 88 | return a - b 89 | }) 90 | return g({}, a, { allSizes: b, deviceSizes: c }) 91 | }, 92 | [T] 93 | ), 94 | V = S, 95 | W = i ? "responsive" : "intrinsic" 96 | "layout" in V && (V.layout && (W = V.layout), delete V.layout) 97 | var X = A 98 | if ("loader" in V) { 99 | if (V.loader) { 100 | var Y, 101 | Z = V.loader 102 | X = function (a) { 103 | a.config 104 | var b = j(a, ["config"]) 105 | return Z(b) 106 | } 107 | } 108 | delete V.loader 109 | } 110 | var $ = "" 111 | if (x(h)) { 112 | var _ = w(h) ? h.default : h 113 | if (!_.src) 114 | throw Error( 115 | "An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ".concat( 116 | JSON.stringify(_) 117 | ) 118 | ) 119 | if ( 120 | ((R = R || _.blurDataURL), 121 | ($ = _.src), 122 | (!W || "fill" !== W) && 123 | ((K = K || _.height), (J = J || _.width), !_.height || !_.width)) 124 | ) 125 | throw Error( 126 | "An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ".concat( 127 | JSON.stringify(_) 128 | ) 129 | ) 130 | } 131 | h = "string" == typeof h ? h : $ 132 | var aa = !B && ("lazy" === D || void 0 === D) 133 | ;(h.startsWith("data:") || h.startsWith("blob:")) && ((q = !0), (aa = !1)), 134 | t.has(h) && (aa = !1), 135 | r && (q = !0) 136 | var ab = e(k.useState(!1), 2), 137 | ac = ab[0], 138 | ad = ab[1], 139 | ae = e( 140 | n.useIntersection({ 141 | rootRef: F, 142 | rootMargin: G || "200px", 143 | disabled: !aa, 144 | }), 145 | 3 146 | ), 147 | af = ae[0], 148 | ag = ae[1], 149 | ah = ae[2], 150 | ai = !aa || ag, 151 | aj = { 152 | boxSizing: "border-box", 153 | display: "block", 154 | overflow: "hidden", 155 | width: "initial", 156 | height: "initial", 157 | background: "none", 158 | opacity: 1, 159 | border: 0, 160 | margin: 0, 161 | padding: 0, 162 | }, 163 | ak = { 164 | boxSizing: "border-box", 165 | display: "block", 166 | width: "initial", 167 | height: "initial", 168 | background: "none", 169 | opacity: 1, 170 | border: 0, 171 | margin: 0, 172 | padding: 0, 173 | }, 174 | al = !1, 175 | am = z(J), 176 | an = z(K), 177 | ao = z(I), 178 | ap = Object.assign({}, L, { 179 | position: "absolute", 180 | top: 0, 181 | left: 0, 182 | bottom: 0, 183 | right: 0, 184 | boxSizing: "border-box", 185 | padding: 0, 186 | border: "none", 187 | margin: "auto", 188 | display: "block", 189 | width: 0, 190 | height: 0, 191 | minWidth: "100%", 192 | maxWidth: "100%", 193 | minHeight: "100%", 194 | maxHeight: "100%", 195 | objectFit: M, 196 | objectPosition: N, 197 | }), 198 | aq = 199 | "blur" !== Q || ac 200 | ? {} 201 | : { 202 | backgroundSize: M || "cover", 203 | backgroundPosition: N || "0% 0%", 204 | filter: "blur(20px)", 205 | backgroundImage: 'url("'.concat(R, '")'), 206 | } 207 | if ("fill" === W) 208 | (aj.display = "block"), 209 | (aj.position = "absolute"), 210 | (aj.top = 0), 211 | (aj.left = 0), 212 | (aj.bottom = 0), 213 | (aj.right = 0) 214 | else if (void 0 !== am && void 0 !== an) { 215 | var ar = an / am, 216 | as = isNaN(ar) ? "100%" : "".concat(100 * ar, "%") 217 | "responsive" === W 218 | ? ((aj.display = "block"), 219 | (aj.position = "relative"), 220 | (al = !0), 221 | (ak.paddingTop = as)) 222 | : "intrinsic" === W 223 | ? ((aj.display = "inline-block"), 224 | (aj.position = "relative"), 225 | (aj.maxWidth = "100%"), 226 | (al = !0), 227 | (ak.maxWidth = "100%"), 228 | (b = 229 | "data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27" 230 | .concat(am, "%27%20height=%27") 231 | .concat(an, "%27/%3e"))) 232 | : "fixed" === W && 233 | ((aj.display = "inline-block"), 234 | (aj.position = "relative"), 235 | (aj.width = am), 236 | (aj.height = an)) 237 | } 238 | var at = { src: u, srcSet: void 0, sizes: void 0 } 239 | ai && 240 | (at = y({ 241 | config: U, 242 | src: h, 243 | unoptimized: q, 244 | layout: W, 245 | width: am, 246 | quality: ao, 247 | sizes: i, 248 | loader: X, 249 | })) 250 | var au = h, 251 | av = "imagesrcset", 252 | aw = "imagesizes" 253 | aw = "imageSizes" 254 | var ax = (d((c = {}), "imageSrcSet", at.srcSet), d(c, aw, at.sizes), c), 255 | ay = k.default.useLayoutEffect, 256 | az = k.useRef(O), 257 | aA = k.useRef(h) 258 | k.useEffect( 259 | function () { 260 | az.current = O 261 | }, 262 | [O] 263 | ), 264 | ay( 265 | function () { 266 | aA.current !== h && (ah(), (aA.current = h)) 267 | }, 268 | [ah, h] 269 | ) 270 | var aB = g( 271 | { 272 | isLazy: aa, 273 | imgAttributes: at, 274 | heightInt: an, 275 | widthInt: am, 276 | qualityInt: ao, 277 | layout: W, 278 | className: H, 279 | imgStyle: ap, 280 | blurStyle: aq, 281 | loading: D, 282 | config: U, 283 | unoptimized: q, 284 | placeholder: Q, 285 | loader: X, 286 | srcString: au, 287 | onLoadingCompleteRef: az, 288 | setBlurComplete: ad, 289 | setIntersection: af, 290 | isVisible: ai, 291 | noscriptSizes: i, 292 | }, 293 | V 294 | ) 295 | return k.default.createElement( 296 | k.default.Fragment, 297 | null, 298 | k.default.createElement( 299 | "span", 300 | { style: aj }, 301 | al 302 | ? k.default.createElement( 303 | "span", 304 | { style: ak }, 305 | b 306 | ? k.default.createElement("img", { 307 | style: { 308 | display: "block", 309 | maxWidth: "100%", 310 | width: "initial", 311 | height: "initial", 312 | background: "none", 313 | opacity: 1, 314 | border: 0, 315 | margin: 0, 316 | padding: 0, 317 | }, 318 | alt: "", 319 | "aria-hidden": !0, 320 | src: b, 321 | }) 322 | : null 323 | ) 324 | : null, 325 | k.default.createElement(C, Object.assign({}, aB)) 326 | ), 327 | B 328 | ? k.default.createElement( 329 | l.default, 330 | null, 331 | k.default.createElement( 332 | "link", 333 | Object.assign( 334 | { 335 | key: "__nimg-" + at.src + at.srcSet + at.sizes, 336 | rel: "preload", 337 | as: "image", 338 | href: at.srcSet ? void 0 : at.src, 339 | }, 340 | ax 341 | ) 342 | ) 343 | ) 344 | : null 345 | ) 346 | }) 347 | var g = c(6495).Z, 348 | h = c(2648).Z, 349 | i = c(1598).Z, 350 | j = c(7273).Z, 351 | k = i(c(7294)), 352 | l = h(c(5443)), 353 | m = c(9309), 354 | n = c(7190), 355 | o = c(9977) 356 | c(3794) 357 | var p = c(2392), 358 | q = { 359 | deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 360 | imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], 361 | path: "./", 362 | loader: "akamai", 363 | dangerouslyAllowSVG: !1, 364 | }, 365 | r = (q.experimentalRemotePatterns, q.experimentalUnoptimized), 366 | s = { 367 | deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], 368 | imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], 369 | path: "./", 370 | loader: "akamai", 371 | dangerouslyAllowSVG: !1, 372 | }, 373 | t = new Set(), 374 | u = 375 | "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", 376 | v = new Map([ 377 | [ 378 | "default", 379 | function (a) { 380 | var b = a.config, 381 | c = a.src, 382 | d = a.width, 383 | e = a.quality 384 | return c.endsWith(".svg") && !b.dangerouslyAllowSVG 385 | ? c 386 | : "" 387 | .concat(p.normalizePathTrailingSlash(b.path), "?url=") 388 | .concat(encodeURIComponent(c), "&w=") 389 | .concat(d, "&q=") 390 | .concat(e || 75) 391 | }, 392 | ], 393 | [ 394 | "imgix", 395 | function (a) { 396 | var b = a.config, 397 | c = a.src, 398 | d = a.width, 399 | e = a.quality, 400 | f = new URL("".concat(b.path).concat(D(c))), 401 | g = f.searchParams 402 | return ( 403 | g.set("auto", g.getAll("auto").join(",") || "format"), 404 | g.set("fit", g.get("fit") || "max"), 405 | g.set("w", g.get("w") || d.toString()), 406 | e && g.set("q", e.toString()), 407 | f.href 408 | ) 409 | }, 410 | ], 411 | [ 412 | "cloudinary", 413 | function (a) { 414 | var b = a.config, 415 | c = a.src, 416 | d = a.width, 417 | e = a.quality, 418 | f = 419 | ["f_auto", "c_limit", "w_" + d, "q_" + (e || "auto")].join( 420 | "," 421 | ) + "/" 422 | return "".concat(b.path).concat(f).concat(D(c)) 423 | }, 424 | ], 425 | [ 426 | "akamai", 427 | function (a) { 428 | var b = a.config, 429 | c = a.src, 430 | d = a.width 431 | return "".concat(b.path).concat(D(c), "?imwidth=").concat(d) 432 | }, 433 | ], 434 | [ 435 | "custom", 436 | function (a) { 437 | var b = a.src 438 | throw Error( 439 | 'Image with src "'.concat(b, '" is missing "loader" prop.') + 440 | "\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader" 441 | ) 442 | }, 443 | ], 444 | ]) 445 | function w(a) { 446 | return void 0 !== a.default 447 | } 448 | function x(a) { 449 | var b 450 | return "object" == typeof a && (w(a) || void 0 !== (b = a).src) 451 | } 452 | function y(a) { 453 | var b = a.config, 454 | c = a.src, 455 | d = a.unoptimized, 456 | e = a.layout, 457 | g = a.width, 458 | h = a.quality, 459 | i = a.sizes, 460 | j = a.loader 461 | if (d) return { src: c, srcSet: void 0, sizes: void 0 } 462 | var k = (function (a, b, c, d) { 463 | var e = a.deviceSizes, 464 | g = a.allSizes 465 | if (d && ("fill" === c || "responsive" === c)) { 466 | for (var h = /(^|\s)(1?\d?\d)vw/g, i = []; (j = h.exec(d)); j) 467 | i.push(parseInt(j[2])) 468 | if (i.length) { 469 | var j, 470 | k, 471 | l = 0.01 * (k = Math).min.apply(k, f(i)) 472 | return { 473 | widths: g.filter(function (a) { 474 | return a >= e[0] * l 475 | }), 476 | kind: "w", 477 | } 478 | } 479 | return { widths: g, kind: "w" } 480 | } 481 | return "number" != typeof b || "fill" === c || "responsive" === c 482 | ? { widths: e, kind: "w" } 483 | : { 484 | widths: f( 485 | new Set( 486 | [b, 2 * b].map(function (a) { 487 | return ( 488 | g.find(function (b) { 489 | return b >= a 490 | }) || g[g.length - 1] 491 | ) 492 | }) 493 | ) 494 | ), 495 | kind: "x", 496 | } 497 | })(b, g, e, i), 498 | l = k.widths, 499 | m = k.kind, 500 | n = l.length - 1 501 | return { 502 | sizes: i || "w" !== m ? i : "100vw", 503 | srcSet: l 504 | .map(function (a, d) { 505 | return "" 506 | .concat(j({ config: b, src: c, quality: h, width: a }), " ") 507 | .concat("w" === m ? a : d + 1) 508 | .concat(m) 509 | }) 510 | .join(", "), 511 | src: j({ config: b, src: c, quality: h, width: l[n] }), 512 | } 513 | } 514 | function z(a) { 515 | return "number" == typeof a ? a : "string" == typeof a ? parseInt(a, 10) : void 0 516 | } 517 | function A(a) { 518 | var b, 519 | c = (null == (b = a.config) ? void 0 : b.loader) || "default", 520 | d = v.get(c) 521 | if (d) return d(a) 522 | throw Error( 523 | 'Unknown "loader" found in "next.config.js". Expected: ' 524 | .concat(m.VALID_LOADERS.join(", "), ". Received: ") 525 | .concat(c) 526 | ) 527 | } 528 | function B(a, b, c, d, e, f) { 529 | a && 530 | a.src !== u && 531 | a["data-loaded-src"] !== b && 532 | ((a["data-loaded-src"] = b), 533 | ("decode" in a ? a.decode() : Promise.resolve()) 534 | .catch(function () {}) 535 | .then(function () { 536 | if ( 537 | a.parentNode && 538 | (t.add(b), "blur" === d && f(!0), null == e ? void 0 : e.current) 539 | ) { 540 | var c = a.naturalWidth, 541 | g = a.naturalHeight 542 | e.current({ naturalWidth: c, naturalHeight: g }) 543 | } 544 | })) 545 | } 546 | var C = function (a) { 547 | var b = a.imgAttributes, 548 | c = (a.heightInt, a.widthInt), 549 | d = a.qualityInt, 550 | e = a.layout, 551 | f = a.className, 552 | h = a.imgStyle, 553 | i = a.blurStyle, 554 | l = a.isLazy, 555 | m = a.placeholder, 556 | n = a.loading, 557 | o = a.srcString, 558 | p = a.config, 559 | q = a.unoptimized, 560 | r = a.loader, 561 | s = a.onLoadingCompleteRef, 562 | t = a.setBlurComplete, 563 | u = a.setIntersection, 564 | v = a.onLoad, 565 | w = a.onError, 566 | x = (a.isVisible, a.noscriptSizes), 567 | z = j(a, [ 568 | "imgAttributes", 569 | "heightInt", 570 | "widthInt", 571 | "qualityInt", 572 | "layout", 573 | "className", 574 | "imgStyle", 575 | "blurStyle", 576 | "isLazy", 577 | "placeholder", 578 | "loading", 579 | "srcString", 580 | "config", 581 | "unoptimized", 582 | "loader", 583 | "onLoadingCompleteRef", 584 | "setBlurComplete", 585 | "setIntersection", 586 | "onLoad", 587 | "onError", 588 | "isVisible", 589 | "noscriptSizes", 590 | ]) 591 | return ( 592 | (n = l ? "lazy" : n), 593 | k.default.createElement( 594 | k.default.Fragment, 595 | null, 596 | k.default.createElement( 597 | "img", 598 | Object.assign({}, z, b, { 599 | decoding: "async", 600 | "data-nimg": e, 601 | className: f, 602 | style: g({}, h, i), 603 | ref: k.useCallback( 604 | function (a) { 605 | u(a), 606 | (null == a ? void 0 : a.complete) && B(a, o, e, m, s, t) 607 | }, 608 | [u, o, e, m, s, t] 609 | ), 610 | onLoad: function (a) { 611 | B(a.currentTarget, o, e, m, s, t), v && v(a) 612 | }, 613 | onError: function (a) { 614 | "blur" === m && t(!0), w && w(a) 615 | }, 616 | }) 617 | ), 618 | (l || "blur" === m) && 619 | k.default.createElement( 620 | "noscript", 621 | null, 622 | k.default.createElement( 623 | "img", 624 | Object.assign( 625 | {}, 626 | z, 627 | y({ 628 | config: p, 629 | src: o, 630 | unoptimized: q, 631 | layout: e, 632 | width: c, 633 | quality: d, 634 | sizes: x, 635 | loader: r, 636 | }), 637 | { 638 | decoding: "async", 639 | "data-nimg": e, 640 | style: h, 641 | className: f, 642 | loading: n, 643 | } 644 | ) 645 | ) 646 | ) 647 | ) 648 | ) 649 | } 650 | function D(a) { 651 | return "/" === a[0] ? a.slice(1) : a 652 | } 653 | ;("function" == typeof b.default || 654 | ("object" == typeof b.default && null !== b.default)) && 655 | void 0 === b.default.__esModule && 656 | (Object.defineProperty(b.default, "__esModule", { value: !0 }), 657 | Object.assign(b.default, b), 658 | (a.exports = b.default)) 659 | }, 660 | 7190: function (a, b, c) { 661 | "use strict" 662 | Object.defineProperty(b, "__esModule", { value: !0 }) 663 | var d = c(4941).Z 664 | Object.defineProperty(b, "__esModule", { value: !0 }), 665 | (b.useIntersection = function (a) { 666 | var b = a.rootRef, 667 | c = a.rootMargin, 668 | h = a.disabled || !g, 669 | i = e.useRef(), 670 | k = d(e.useState(!1), 2), 671 | l = k[0], 672 | m = k[1], 673 | n = d(e.useState(null), 2), 674 | o = n[0], 675 | p = n[1] 676 | e.useEffect( 677 | function () { 678 | if (g) { 679 | if ((i.current && (i.current(), (i.current = void 0)), !h && !l)) 680 | return ( 681 | o && 682 | o.tagName && 683 | (i.current = j( 684 | o, 685 | function (a) { 686 | return a && m(a) 687 | }, 688 | { 689 | root: null == b ? void 0 : b.current, 690 | rootMargin: c, 691 | } 692 | )), 693 | function () { 694 | null == i.current || i.current(), (i.current = void 0) 695 | } 696 | ) 697 | } else if (!l) { 698 | var a = f.requestIdleCallback(function () { 699 | return m(!0) 700 | }) 701 | return function () { 702 | return f.cancelIdleCallback(a) 703 | } 704 | } 705 | }, 706 | [o, h, c, b, l] 707 | ) 708 | var q = e.useCallback(function () { 709 | m(!1) 710 | }, []) 711 | return [p, l, q] 712 | }) 713 | var e = c(7294), 714 | f = c(9311), 715 | g = "function" == typeof IntersectionObserver, 716 | h = new Map(), 717 | i = [] 718 | function j(a, b, c) { 719 | var d = k(c), 720 | e = d.id, 721 | f = d.observer, 722 | g = d.elements 723 | return ( 724 | g.set(a, b), 725 | f.observe(a), 726 | function () { 727 | if ((g.delete(a), f.unobserve(a), 0 === g.size)) { 728 | f.disconnect(), h.delete(e) 729 | var b = i.findIndex(function (a) { 730 | return a.root === e.root && a.margin === e.margin 731 | }) 732 | b > -1 && i.splice(b, 1) 733 | } 734 | } 735 | ) 736 | } 737 | function k(a) { 738 | var b, 739 | c = { root: a.root || null, margin: a.rootMargin || "" }, 740 | d = i.find(function (a) { 741 | return a.root === c.root && a.margin === c.margin 742 | }) 743 | if (d && (b = h.get(d))) return b 744 | var e = new Map(), 745 | f = new IntersectionObserver(function (a) { 746 | a.forEach(function (a) { 747 | var b = e.get(a.target), 748 | c = a.isIntersecting || a.intersectionRatio > 0 749 | b && c && b(c) 750 | }) 751 | }, a) 752 | return (b = { id: c, observer: f, elements: e }), i.push(c), h.set(c, b), b 753 | } 754 | ;("function" == typeof b.default || 755 | ("object" == typeof b.default && null !== b.default)) && 756 | void 0 === b.default.__esModule && 757 | (Object.defineProperty(b.default, "__esModule", { value: !0 }), 758 | Object.assign(b.default, b), 759 | (a.exports = b.default)) 760 | }, 761 | 3752: function (a, b, c) { 762 | "use strict" 763 | c.r(b), 764 | c.d(b, { 765 | default: function () { 766 | return m 767 | }, 768 | }) 769 | var d = c(5893), 770 | e = c(9008), 771 | f = c.n(e), 772 | g = c(5675), 773 | h = c.n(g), 774 | i = c(214), 775 | j = c.n(i), 776 | k = { 777 | src: "/_next/static/media/lily-pad.c7df30b2.png", 778 | height: 500, 779 | width: 500, 780 | blurDataURL: 781 | "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAA6klEQVR42mOAgFI5BpYCWwYYYCqwZmAol4VxeaY0M1zOSM3+xaAUs4NBIXpTekrOT5AYSA6I7YU7a4w+Z2bV/Df0aPqv7974PzO77n9HtcVPBgZfaQa1CB8/Rvfy3/aBU/4HJM//E5C84I9TyPR/7O6V/zUjQyIYPBqqN9nnlPw38qr4oe9U+k/PsfSfqU/VD9usov9utRUbGFK7p7FbFmacSFi/4r/Xghn/vRfN/B+/bvl/y/z0o/ndc1kZQEDVOVDQq7Fupd+UCa/8p0185dPatFJE00GAAQSsstOZGRBABIhFYRzTlARmADU0VsVrWVOvAAAAAElFTkSuQmCC", 782 | }, 783 | l = function () { 784 | return (0, d.jsxs)("div", { 785 | className: j().container, 786 | children: [ 787 | (0, d.jsxs)(f(), { 788 | children: [ 789 | (0, d.jsx)("title", { children: "Unstoppable Froge" }), 790 | (0, d.jsx)("meta", { 791 | name: "description", 792 | content: "Just a humble froge", 793 | }), 794 | (0, d.jsx)("link", { rel: "icon", href: "/favicon.ico" }), 795 | ], 796 | }), 797 | (0, d.jsxs)("main", { 798 | className: j().main, 799 | children: [ 800 | (0, d.jsx)("p", { children: "I am but a humble froge" }), 801 | (0, d.jsx)(h(), { src: k, alt: "Froge" }), 802 | (0, d.jsxs)("p", { 803 | children: [ 804 | "Join the", 805 | " ", 806 | (0, d.jsxs)("a", { 807 | className: j().link, 808 | href: "https://discord.gg/FJvECDTpjp", 809 | children: ["Lily Pad Discord", " "], 810 | }), 811 | "for interacing with other growing web3 devs!", 812 | ], 813 | }), 814 | ], 815 | }), 816 | ], 817 | }) 818 | }, 819 | m = l 820 | }, 821 | 214: function (a) { 822 | a.exports = { 823 | container: "Home_container__bCOhY", 824 | main: "Home_main__nLjiQ", 825 | footer: "Home_footer____T7K", 826 | title: "Home_title__T09hD", 827 | description: "Home_description__41Owk", 828 | code: "Home_code__suPER", 829 | grid: "Home_grid__GxQ85", 830 | card: "Home_card___LpL1", 831 | logo: "Home_logo__27_tb", 832 | link: "Home_link__mt0ji", 833 | } 834 | }, 835 | 9008: function (a, b, c) { 836 | a.exports = c(5443) 837 | }, 838 | 5675: function (a, b, c) { 839 | a.exports = c(8045) 840 | }, 841 | }, 842 | function (a) { 843 | a.O(0, [774, 888, 179], function () { 844 | var b 845 | return a((a.s = 8312)) 846 | }), 847 | (_N_E = a.O()) 848 | }, 849 | ]) 850 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/chunks/webpack-7ee66019f7f6d30f.js: -------------------------------------------------------------------------------- 1 | !(function () { 2 | "use strict" 3 | var a, 4 | b, 5 | c, 6 | d, 7 | e = {}, 8 | f = {} 9 | function g(a) { 10 | var b = f[a] 11 | if (void 0 !== b) return b.exports 12 | var c = (f[a] = { exports: {} }), 13 | d = !0 14 | try { 15 | e[a](c, c.exports, g), (d = !1) 16 | } finally { 17 | d && delete f[a] 18 | } 19 | return c.exports 20 | } 21 | ;(g.m = e), 22 | (a = []), 23 | (g.O = function (b, c, d, e) { 24 | if (c) { 25 | e = e || 0 26 | for (var f = a.length; f > 0 && a[f - 1][2] > e; f--) a[f] = a[f - 1] 27 | a[f] = [c, d, e] 28 | return 29 | } 30 | for (var h = 1 / 0, f = 0; f < a.length; f++) { 31 | for (var c = a[f][0], d = a[f][1], e = a[f][2], i = !0, j = 0; j < c.length; j++) 32 | h >= e && 33 | Object.keys(g.O).every(function (a) { 34 | return g.O[a](c[j]) 35 | }) 36 | ? c.splice(j--, 1) 37 | : ((i = !1), e < h && (h = e)) 38 | if (i) { 39 | a.splice(f--, 1) 40 | var k = d() 41 | void 0 !== k && (b = k) 42 | } 43 | } 44 | return b 45 | }), 46 | (g.n = function (a) { 47 | var b = 48 | a && a.__esModule 49 | ? function () { 50 | return a.default 51 | } 52 | : function () { 53 | return a 54 | } 55 | return g.d(b, { a: b }), b 56 | }), 57 | (g.d = function (a, b) { 58 | for (var c in b) 59 | g.o(b, c) && 60 | !g.o(a, c) && 61 | Object.defineProperty(a, c, { enumerable: !0, get: b[c] }) 62 | }), 63 | (g.o = function (a, b) { 64 | return Object.prototype.hasOwnProperty.call(a, b) 65 | }), 66 | (g.r = function (a) { 67 | "undefined" != typeof Symbol && 68 | Symbol.toStringTag && 69 | Object.defineProperty(a, Symbol.toStringTag, { value: "Module" }), 70 | Object.defineProperty(a, "__esModule", { value: !0 }) 71 | }), 72 | (g.p = "/_next/"), 73 | (b = { 272: 0 }), 74 | (g.O.j = function (a) { 75 | return 0 === b[a] 76 | }), 77 | (c = function (a, c) { 78 | var d, 79 | e, 80 | f = c[0], 81 | h = c[1], 82 | i = c[2], 83 | j = 0 84 | if ( 85 | f.some(function (a) { 86 | return 0 !== b[a] 87 | }) 88 | ) { 89 | for (d in h) g.o(h, d) && (g.m[d] = h[d]) 90 | if (i) var k = i(g) 91 | } 92 | for (a && a(c); j < f.length; j++) 93 | (e = f[j]), g.o(b, e) && b[e] && b[e][0](), (b[e] = 0) 94 | return g.O(k) 95 | }), 96 | (d = self.webpackChunk_N_E = self.webpackChunk_N_E || []).forEach(c.bind(null, 0)), 97 | (d.push = c.bind(null, d.push.bind(d))) 98 | })() 99 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/css/ab44ce7add5c3d11.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, 6 | Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | a { 9 | color: inherit; 10 | text-decoration: none; 11 | } 12 | * { 13 | box-sizing: border-box; 14 | } 15 | @media (prefers-color-scheme: dark) { 16 | html { 17 | color-scheme: dark; 18 | } 19 | body { 20 | color: #fff; 21 | background: #000; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/css/f49f07195cf978c4.css: -------------------------------------------------------------------------------- 1 | .Home_container__bCOhY { 2 | padding: 0 2rem; 3 | } 4 | .Home_main__nLjiQ { 5 | min-height: 100vh; 6 | padding: 4rem 0; 7 | flex: 1 1; 8 | flex-direction: column; 9 | } 10 | .Home_footer____T7K, 11 | .Home_main__nLjiQ { 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | } 16 | .Home_footer____T7K { 17 | flex: 1 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | } 21 | .Home_footer____T7K a { 22 | display: flex; 23 | justify-content: center; 24 | align-items: center; 25 | flex-grow: 1; 26 | } 27 | .Home_title__T09hD a { 28 | color: #0070f3; 29 | text-decoration: none; 30 | } 31 | .Home_title__T09hD a:active, 32 | .Home_title__T09hD a:focus, 33 | .Home_title__T09hD a:hover { 34 | text-decoration: underline; 35 | } 36 | .Home_title__T09hD { 37 | margin: 0; 38 | line-height: 1.15; 39 | font-size: 4rem; 40 | } 41 | .Home_description__41Owk, 42 | .Home_title__T09hD { 43 | text-align: center; 44 | } 45 | .Home_description__41Owk { 46 | margin: 4rem 0; 47 | line-height: 1.5; 48 | font-size: 1.5rem; 49 | } 50 | .Home_code__suPER { 51 | background: #fafafa; 52 | border-radius: 5px; 53 | padding: 0.75rem; 54 | font-size: 1.1rem; 55 | font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, 56 | Bitstream Vera Sans Mono, Courier New, monospace; 57 | } 58 | .Home_grid__GxQ85 { 59 | display: flex; 60 | align-items: center; 61 | justify-content: center; 62 | flex-wrap: wrap; 63 | max-width: 800px; 64 | } 65 | .Home_card___LpL1 { 66 | margin: 1rem; 67 | padding: 1.5rem; 68 | text-align: left; 69 | color: inherit; 70 | text-decoration: none; 71 | border: 1px solid #eaeaea; 72 | border-radius: 10px; 73 | transition: color 0.15s ease, border-color 0.15s ease; 74 | max-width: 300px; 75 | } 76 | .Home_card___LpL1:active, 77 | .Home_card___LpL1:focus, 78 | .Home_card___LpL1:hover { 79 | color: #0070f3; 80 | border-color: #0070f3; 81 | } 82 | .Home_card___LpL1 h2 { 83 | margin: 0 0 1rem; 84 | font-size: 1.5rem; 85 | } 86 | .Home_card___LpL1 p { 87 | margin: 0; 88 | font-size: 1.25rem; 89 | line-height: 1.5; 90 | } 91 | .Home_logo__27_tb { 92 | height: 1em; 93 | margin-left: 0.5rem; 94 | } 95 | .Home_link__mt0ji { 96 | color: blue; 97 | } 98 | @media (max-width: 600px) { 99 | .Home_grid__GxQ85 { 100 | width: 100%; 101 | flex-direction: column; 102 | } 103 | } 104 | @media (prefers-color-scheme: dark) { 105 | .Home_card___LpL1, 106 | .Home_footer____T7K { 107 | border-color: #222; 108 | } 109 | .Home_code__suPER { 110 | background: #111; 111 | } 112 | .Home_logo__27_tb img { 113 | filter: invert(1); 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/media/lily-pad.c7df30b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/unstoppable-ui-static-export/_next/static/media/lily-pad.c7df30b2.png -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/txOYopp3gUbVMfgCziGxY/_buildManifest.js: -------------------------------------------------------------------------------- 1 | ;(self.__BUILD_MANIFEST = { 2 | __rewrites: { beforeFiles: [], afterFiles: [], fallback: [] }, 3 | "/": ["static/css/f49f07195cf978c4.css", "static/chunks/pages/index-36b30e9afe032536.js"], 4 | "/_error": ["static/chunks/pages/_error-7397496ca01950b1.js"], 5 | sortedPages: ["/", "/_app", "/_error"], 6 | }), 7 | self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() 8 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/_next/static/txOYopp3gUbVMfgCziGxY/_ssgManifest.js: -------------------------------------------------------------------------------- 1 | ;(self.__SSG_MANIFEST = new Set()), self.__SSG_MANIFEST_CB && self.__SSG_MANIFEST_CB() 2 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/unstoppable-ui-static-export/favicon.ico -------------------------------------------------------------------------------- /unstoppable-ui-static-export/frog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/unstoppable-ui-static-export/frog.png -------------------------------------------------------------------------------- /unstoppable-ui-static-export/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Unstoppable Froge 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 |
32 |

I am but a humble froge

33 | Froge 128 |

129 | Join the 130 | Lily Pad Discord for interacing with other growing web3 devs! 133 |

134 |
135 |
136 |
137 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /unstoppable-ui-static-export/lily-pad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PatrickAlphaC/unstoppable-ui/41555304bdb775abcc56eab7cca2f0e472a0f9af/unstoppable-ui-static-export/lily-pad.png -------------------------------------------------------------------------------- /unstoppable-ui-static-export/manifest.arkb: -------------------------------------------------------------------------------- 1 | {"manifest":"arweave/paths","version":"0.1.0","index":{"path":"index.html"},"paths":{"favicon.ico":{"id":"GiAdxwEo0UYHuR0sJ3m8cMf04mZAO-LJbmmScBR01zE"},"frog.png":{"id":"GiAdxwEo0UYHuR0sJ3m8cMf04mZAO-LJbmmScBR01zE"},"lily-pad.png":{"id":"hx7PlDimQHA8EZCvSD21VWpd4Y6nXn-nVnbjOSskX9I"},"_next/static/chunks/framework-db825bd0b4ae01ef.js":{"id":"MEHzWViba37y5itCQPjNwm3Db-6M8KKtB9ZsUY9yAo4"},"_next/static/chunks/main-5fea2acfd5d9e895.js":{"id":"Dw8wFIQTEF53tytR-K92M8SzdlCwlNTyvR4H171_O6w"},"_next/static/chunks/polyfills-c67a75d1b6f99dc8.js":{"id":"8bfyw3HqACPfAVTkmlLS1BqXYFnnjT4keZNDTLQh1bs"},"_next/static/chunks/webpack-7ee66019f7f6d30f.js":{"id":"fJRVN6r8047Jor3PWs7iJod8rO1tF0clChaZeFHi3SI"},"_next/static/css/ab44ce7add5c3d11.css":{"id":"q892hLHAGRprNHyThnGHPIUe32KO0UXKoTvaQgrl2A0"},"_next/static/css/f49f07195cf978c4.css":{"id":"yvvdk27T9_MD3o1ZvLsg0jWIExRXjjZXOGIxFaA2eLs"},"_next/static/media/lily-pad.c7df30b2.png":{"id":"hx7PlDimQHA8EZCvSD21VWpd4Y6nXn-nVnbjOSskX9I"},"_next/static/txOYopp3gUbVMfgCziGxY/_buildManifest.js":{"id":"jkhYZgSvD3F0JAb7Hql5-dbW1K70y1GVsStt-8oAF24"},"_next/static/txOYopp3gUbVMfgCziGxY/_ssgManifest.js":{"id":"uOv7BrashIOKd1ftekpQO-EihKDY_1kREcTyRPX4yt4"},"_next/static/chunks/pages/_app-deb173bd80cbaa92.js":{"id":"WSLZlqFi2oxAOaixWotzGVXwbyDXBJkHN4cZvRqfdyU"},"_next/static/chunks/pages/_error-7397496ca01950b1.js":{"id":"sQPCTwVBljjjS1k_quEXu8nzfqEIgeBvQ5By3NjsFp4"},"_next/static/chunks/pages/index-36b30e9afe032536.js":{"id":"w_fOd6xUxg18g4RomZu7mdRNnKwGZb_4aR99zo_QMr8"},"index.html":{"id":"3mXtUKFY4Y5EvrospYsvxpYcSTvitIOO0NaLxJHddMo"},"404.html":{"id":"AsiknGMAtxxqocTBS6Hzc08AaAfwttiWGScwzxsh0J8"}}} -------------------------------------------------------------------------------- /upload-to-skynet.js: -------------------------------------------------------------------------------- 1 | const { SkynetClient } = require("@skynetlabs/skynet-nodejs") 2 | 3 | const client = new SkynetClient() 4 | 5 | async function uploadToSkynet() { 6 | const skylink = await client.uploadDirectory("./relative-links-output") 7 | console.log(`Upload successful, skylink: ${skylink}`) 8 | } 9 | 10 | uploadToSkynet() 11 | .then(() => process.exit(0)) 12 | .catch((error) => { 13 | console.error(error) 14 | process.exit(1) 15 | }) 16 | --------------------------------------------------------------------------------