├── webapp ├── .ci │ ├── .gitignore │ ├── Pulumi.website-market-dev.yaml │ ├── Pulumi.website-market-prd.yaml │ ├── Pulumi.website-market-stg.yaml │ ├── Pulumi.yaml │ ├── package.json │ ├── index.ts │ └── tsconfig.json ├── src │ ├── components │ │ ├── Layout │ │ │ ├── Column │ │ │ │ ├── Column.css │ │ │ │ ├── index.ts │ │ │ │ ├── Column.types.ts │ │ │ │ └── Column.tsx │ │ │ └── Row │ │ │ │ ├── index.ts │ │ │ │ ├── Row.types.ts │ │ │ │ ├── Row.css │ │ │ │ └── Row.tsx │ │ ├── Chip │ │ │ ├── index.ts │ │ │ └── Chip.types.ts │ │ ├── Mana │ │ │ ├── index.ts │ │ │ └── Mana.types.ts │ │ ├── Menu │ │ │ ├── index.ts │ │ │ ├── MenuItem │ │ │ │ ├── index.ts │ │ │ │ ├── MenuItem.types.ts │ │ │ │ └── MenuItem.css │ │ │ ├── DropdownMenu │ │ │ │ ├── index.ts │ │ │ │ └── DropdownMenu.types.ts │ │ │ ├── Menu.types.ts │ │ │ └── Menu.tsx │ │ ├── AssetBrowse │ │ │ ├── Box │ │ │ │ ├── index.ts │ │ │ │ ├── Box.types.ts │ │ │ │ ├── Box.module.css │ │ │ │ └── Box.tsx │ │ │ ├── ToggleBox │ │ │ │ ├── index.ts │ │ │ │ └── ToggleBox.types.ts │ │ │ └── index.ts │ │ ├── Bid │ │ │ ├── index.ts │ │ │ ├── AcceptButton │ │ │ │ ├── index.ts │ │ │ │ └── AcceptButton.types.ts │ │ │ └── WarningMessage │ │ │ │ ├── index.ts │ │ │ │ ├── WarningMessage.css │ │ │ │ └── WarningMessage.types.ts │ │ ├── BuyPage │ │ │ ├── Name │ │ │ │ ├── index.ts │ │ │ │ ├── Name.types.ts │ │ │ │ └── Name.tsx │ │ │ ├── Price │ │ │ │ ├── index.ts │ │ │ │ ├── Price.types.ts │ │ │ │ └── Price.tsx │ │ │ ├── index.ts │ │ │ ├── BuyNFTModal │ │ │ │ └── index.ts │ │ │ ├── MintItemModal │ │ │ │ └── index.ts │ │ │ ├── BuyPage.types.ts │ │ │ └── BuyPage.css │ │ ├── Footer │ │ │ ├── index.ts │ │ │ └── Footer.tsx │ │ ├── Bids │ │ │ ├── index.ts │ │ │ └── Bids.css │ │ ├── Routes │ │ │ └── index.ts │ │ ├── Sales │ │ │ ├── index.ts │ │ │ ├── Stats │ │ │ │ ├── index.ts │ │ │ │ └── Stats.types.ts │ │ │ ├── Activity │ │ │ │ ├── index.ts │ │ │ │ └── Activity.types.ts │ │ │ ├── Sales.css │ │ │ └── Sales.tsx │ │ ├── AssetPage │ │ │ ├── BidList │ │ │ │ ├── BidList.css │ │ │ │ ├── index.ts │ │ │ │ ├── BidList.types.ts │ │ │ │ └── BidList.container.ts │ │ │ ├── JumpIn │ │ │ │ ├── index.ts │ │ │ │ ├── JumpIn.types.ts │ │ │ │ └── JumpIn.module.css │ │ │ ├── Owner │ │ │ │ ├── index.ts │ │ │ │ ├── Owner.types.tsx │ │ │ │ └── Owner.css │ │ │ ├── Network │ │ │ │ ├── index.ts │ │ │ │ ├── Network.types.ts │ │ │ │ └── Network.tsx │ │ │ ├── Title │ │ │ │ ├── index.ts │ │ │ │ ├── Title.types.ts │ │ │ │ ├── Title.module.css │ │ │ │ └── Title.tsx │ │ │ ├── Actions │ │ │ │ ├── index.ts │ │ │ │ ├── Actions.module.css │ │ │ │ ├── Actions.types.ts │ │ │ │ └── Actions.container.ts │ │ │ ├── ENSDetail │ │ │ │ ├── index.ts │ │ │ │ └── ENSDetail.types.ts │ │ │ ├── Highlight │ │ │ │ ├── index.ts │ │ │ │ ├── Highlight.types.ts │ │ │ │ └── Highlight.css │ │ │ ├── Price │ │ │ │ ├── index.ts │ │ │ │ ├── Price.types.ts │ │ │ │ ├── Price.tsx │ │ │ │ └── Price.container.ts │ │ │ ├── Description │ │ │ │ ├── Description.types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── Description.css │ │ │ │ └── Description.tsx │ │ │ ├── Expiration │ │ │ │ ├── Expiration.module.css │ │ │ │ ├── index.ts │ │ │ │ ├── Expiration.types.ts │ │ │ │ ├── Expiration.container.ts │ │ │ │ └── Expiration.tsx │ │ │ ├── Highlights │ │ │ │ ├── index.ts │ │ │ │ ├── Highlights.types.ts │ │ │ │ ├── Highlights.css │ │ │ │ └── Highlights.tsx │ │ │ ├── index.ts │ │ │ ├── BaseDetail │ │ │ │ ├── index.ts │ │ │ │ └── BaseDetail.types.ts │ │ │ ├── Collection │ │ │ │ ├── index.ts │ │ │ │ ├── Collection.types.tsx │ │ │ │ └── Collection.module.css │ │ │ ├── IconBadge │ │ │ │ ├── index.ts │ │ │ │ ├── IconBadge.types.ts │ │ │ │ └── IconBadge.tsx │ │ │ ├── WearableDetail │ │ │ │ ├── WearableDetail.module.css │ │ │ │ ├── index.ts │ │ │ │ └── WearableDetail.types.ts │ │ │ ├── ErrorBoundary │ │ │ │ ├── index.ts │ │ │ │ └── ErrorBoundary.types.ts │ │ │ ├── EstateDetail │ │ │ │ ├── index.ts │ │ │ │ ├── ParcelCoordinates │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ParcelCoordinates.types.ts │ │ │ │ │ └── ParcelCoordinates.container.ts │ │ │ │ ├── EstateDetail.types.ts │ │ │ │ └── EstateDetail.css │ │ │ ├── ParcelDetail │ │ │ │ ├── index.ts │ │ │ │ ├── ParcelDetail.types.ts │ │ │ │ └── ParcelDetail.module.css │ │ │ ├── ItemDetail │ │ │ │ ├── index.ts │ │ │ │ ├── ItemDetail.module.css │ │ │ │ ├── ItemDetail.types.ts │ │ │ │ └── ItemDetail.container.ts │ │ │ ├── AssetPage.css │ │ │ ├── GenderBadge │ │ │ │ ├── index.ts │ │ │ │ └── GenderBadge.types.ts │ │ │ ├── RarityBadge │ │ │ │ ├── index.ts │ │ │ │ ├── RarityBadge.module.css │ │ │ │ └── RarityBadge.types.ts │ │ │ ├── CategoryBadge │ │ │ │ ├── index.ts │ │ │ │ ├── CategoryBadge.types.ts │ │ │ │ └── CategoryBadge.tsx │ │ │ ├── TransactionHistory │ │ │ │ ├── index.ts │ │ │ │ ├── TransactionHistory.types.ts │ │ │ │ └── TransactionHistory.css │ │ │ ├── ProximityHighlights │ │ │ │ ├── index.ts │ │ │ │ ├── ProximityHighlights.css │ │ │ │ ├── ProximityHighlights.types.ts │ │ │ │ └── ProximityHighlights.container.ts │ │ │ ├── AssetPage.types.ts │ │ │ └── AssetPage.container.tsx │ │ ├── Atlas │ │ │ ├── Popup │ │ │ │ ├── index.ts │ │ │ │ └── Popup.types.ts │ │ │ ├── index.ts │ │ │ ├── Atlas.css │ │ │ └── Atlas.container.ts │ │ ├── Navbar │ │ │ ├── index.ts │ │ │ ├── Navbar.css │ │ │ └── Navbar.types.ts │ │ ├── Wallet │ │ │ ├── index.ts │ │ │ ├── Wallet.css │ │ │ ├── Wallet.types.ts │ │ │ └── Wallet.container.ts │ │ ├── AssetCard │ │ │ ├── ENSTags │ │ │ │ ├── index.ts │ │ │ │ ├── ENSTags.types.ts │ │ │ │ ├── ENSTags.css │ │ │ │ └── ENSTags.tsx │ │ │ ├── index.ts │ │ │ ├── EstateTags │ │ │ │ ├── index.ts │ │ │ │ ├── EstateTags.types.ts │ │ │ │ ├── EstateTags.css │ │ │ │ └── EstateTags.tsx │ │ │ ├── ParcelTags │ │ │ │ ├── index.ts │ │ │ │ ├── ParcelTags.types.ts │ │ │ │ ├── ParcelTags.module.css │ │ │ │ └── ParcelTags.tsx │ │ │ ├── WearableTags │ │ │ │ ├── index.ts │ │ │ │ └── WearableTags.types.ts │ │ │ ├── ProximityTags │ │ │ │ ├── index.ts │ │ │ │ ├── ProximityTags.types.ts │ │ │ │ ├── ProximityTags.css │ │ │ │ └── ProximityTags.container.ts │ │ │ └── AssetCard.types.ts │ │ ├── BidPage │ │ │ ├── index.ts │ │ │ ├── BidModal │ │ │ │ ├── index.ts │ │ │ │ ├── BidModal.css │ │ │ │ └── BidModal.types.ts │ │ │ └── BidPage.types.ts │ │ ├── ManaField │ │ │ ├── index.ts │ │ │ ├── ManaField.types.ts │ │ │ ├── ManaField.css │ │ │ └── ManaField.tsx │ │ ├── Collapsible │ │ │ ├── index.ts │ │ │ ├── Collapsible.types.ts │ │ │ └── Collapsible.module.css │ │ ├── HomePage │ │ │ ├── index.ts │ │ │ ├── Slideshow │ │ │ │ ├── index.ts │ │ │ │ └── Slideshow.types.ts │ │ │ └── HomePage.css │ │ ├── IntroPopup │ │ │ ├── index.ts │ │ │ └── IntroPopup.types.ts │ │ ├── Navigation │ │ │ ├── index.ts │ │ │ └── Navigation.types.ts │ │ ├── PageHeader │ │ │ ├── index.ts │ │ │ ├── PageHeader.css │ │ │ ├── PageHeader.types.ts │ │ │ └── PageHeader.tsx │ │ ├── ScrollToTop │ │ │ ├── index.ts │ │ │ └── ScrollToTop.tsx │ │ ├── SellPage │ │ │ ├── index.ts │ │ │ ├── SellModal │ │ │ │ ├── index.ts │ │ │ │ └── SellModal.types.ts │ │ │ └── SellPage.css │ │ ├── SignInPage │ │ │ ├── index.ts │ │ │ ├── SignInPage.css │ │ │ └── SignInPage.tsx │ │ ├── Vendor │ │ │ ├── NFTDetail │ │ │ │ ├── index.ts │ │ │ │ └── NFTDetail.types.ts │ │ │ ├── NFTSections │ │ │ │ ├── index.ts │ │ │ │ └── NFTSections.types.ts │ │ │ ├── NFTFilters │ │ │ │ ├── index.ts │ │ │ │ ├── FiltersMenu │ │ │ │ │ ├── index.ts │ │ │ │ │ └── FiltersMenu.types.ts │ │ │ │ ├── TextFilter │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TextFilter.types.ts │ │ │ │ ├── ArrayFilter │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ArrayFilter.types.ts │ │ │ │ ├── SelectFilter │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SelectFilter.types.ts │ │ │ │ └── NFTFilters.types.ts │ │ │ ├── NFTSidebar │ │ │ │ ├── index.ts │ │ │ │ └── NFTSidebar.types.ts │ │ │ ├── VendorMenu │ │ │ │ ├── index.ts │ │ │ │ ├── VendorMenu.types.ts │ │ │ │ └── VendorMenu.container.ts │ │ │ ├── decentraland │ │ │ │ ├── NFTSections │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── NFTSectionsMenuItems │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── NFTSectionsMenuItems.types.tsx │ │ │ │ │ ├── NFTSections.types.ts │ │ │ │ │ └── NFTSections.tsx │ │ │ │ ├── NFTSidebar │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── NFTSidebar.css │ │ │ │ │ ├── NFTSidebar.types.ts │ │ │ │ │ └── NFTSidebar.tsx │ │ │ │ └── NFTFilters │ │ │ │ │ └── index.ts │ │ │ ├── known_origin │ │ │ │ ├── NFTSections │ │ │ │ │ ├── index.ts │ │ │ │ │ └── NFTSections.types.ts │ │ │ │ └── NFTFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── NFTFilters.types.ts │ │ │ │ │ └── NFTFilters.container.ts │ │ │ ├── super_rare │ │ │ │ └── NFTFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── NFTFilters.types.ts │ │ │ │ │ └── NFTFilters.container.ts │ │ │ ├── makers_place │ │ │ │ └── NFTFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── NFTFilters.types.ts │ │ │ │ │ └── NFTFilters.container.ts │ │ │ └── PriceChangeNotice │ │ │ │ ├── index.ts │ │ │ │ ├── PriceChangeNotice.types.ts │ │ │ │ ├── PriceChangeNotice.container.ts │ │ │ │ └── PriceChangeNotice.css │ │ ├── AssetList │ │ │ └── index.ts │ │ ├── Coordinate │ │ │ ├── index.ts │ │ │ ├── Coordinate.types.ts │ │ │ ├── Coordinate.module.css │ │ │ └── Coordinate.tsx │ │ ├── LandsPage │ │ │ ├── index.ts │ │ │ ├── LandsPage.types.ts │ │ │ └── LandsPage.container.ts │ │ ├── AccountPage │ │ │ ├── index.ts │ │ │ ├── AccountBanner │ │ │ │ ├── index.ts │ │ │ │ └── AccountBanner.types.tsx │ │ │ └── AccountPage.css │ │ ├── AssetAction │ │ │ ├── index.ts │ │ │ ├── AssetAction.types.ts │ │ │ └── AssetAction.container.ts │ │ ├── AssetImage │ │ │ ├── index.ts │ │ │ └── AssetImage.types.ts │ │ ├── BrowsePage │ │ │ ├── index.ts │ │ │ ├── BrowsePage.types.ts │ │ │ └── BrowsePage.container.ts │ │ ├── ExternalLinkModal │ │ │ ├── ExternalLinkModal.css │ │ │ ├── ExternalLinkModal.types.ts │ │ │ └── index.ts │ │ ├── LegacyNFTPage │ │ │ ├── index.ts │ │ │ └── LegacyNFTPage.types.ts │ │ ├── ListedBadge │ │ │ ├── index.ts │ │ │ ├── ListedBadge.module.css │ │ │ └── ListedBadge.tsx │ │ ├── UserMenu │ │ │ ├── index.ts │ │ │ ├── UserMenu.tsx │ │ │ └── UserMenu.types.ts │ │ ├── ActivityPage │ │ │ ├── Transaction │ │ │ │ ├── index.ts │ │ │ │ ├── TransactionDetail │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TransactionDetail.types.ts │ │ │ │ └── Transaction.types.ts │ │ │ ├── index.ts │ │ │ ├── ActivityPage.css │ │ │ └── ActivityPage.types.ts │ │ ├── CollectionImage │ │ │ ├── CollectionImage.types.ts │ │ │ ├── index.ts │ │ │ └── CollectionImage.css │ │ ├── OnSaleList │ │ │ ├── AssetCell │ │ │ │ ├── index.ts │ │ │ │ ├── AssetCell.types.tsx │ │ │ │ └── AssetCell.module.css │ │ │ ├── index.ts │ │ │ ├── OnSaleListElement │ │ │ │ ├── index.ts │ │ │ │ ├── OnSaleListElement.css │ │ │ │ └── OnSaleListElement.types.ts │ │ │ ├── OnSaleList.types.ts │ │ │ └── OnSaleList.module.css │ │ ├── SettingsPage │ │ │ ├── index.ts │ │ │ └── Authorization │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ ├── StoreSettings │ │ │ ├── TextInput │ │ │ │ ├── index.ts │ │ │ │ ├── TextInput.types.ts │ │ │ │ ├── TextInput.css │ │ │ │ └── TextInput.tsx │ │ │ ├── CoverPicker │ │ │ │ ├── index.ts │ │ │ │ └── CoverPicker.types.ts │ │ │ ├── index.ts │ │ │ ├── InputContainer │ │ │ │ ├── index.ts │ │ │ │ ├── InputContainer.css │ │ │ │ ├── InputContainer.types.ts │ │ │ │ └── InputContainer.tsx │ │ │ └── StoreSettings.types.ts │ │ ├── TransferPage │ │ │ ├── index.ts │ │ │ ├── TransferPage.css │ │ │ └── TransferPage.types.ts │ │ ├── AssetProvider │ │ │ └── index.ts │ │ ├── PartnersSidebar │ │ │ ├── index.ts │ │ │ ├── PartnersSidebar.css │ │ │ └── PartnersSidebar.types.ts │ │ ├── AccountSidebar │ │ │ ├── index.ts │ │ │ ├── CurrentAccountSidebar │ │ │ │ ├── index.ts │ │ │ │ └── CurrentAccountSidebar.types.tsx │ │ │ ├── OtherAccountSidebar │ │ │ │ ├── index.ts │ │ │ │ └── OtherAccountSidebar.types.tsx │ │ │ ├── AccountSidebar.types.ts │ │ │ └── AccountSidebar.container.ts │ │ ├── CancelSalePage │ │ │ ├── index.ts │ │ │ ├── CancelSalePage.css │ │ │ └── CancelSalePage.types.ts │ │ ├── AssetProviderPage │ │ │ ├── index.ts │ │ │ ├── AssetProviderPage.module.css │ │ │ ├── AssetProviderPage.types.ts │ │ │ └── AssetProviderPage.container.ts │ │ ├── CollectionList │ │ │ ├── index.ts │ │ │ └── CollectionList.types.ts │ │ ├── CollectionPage │ │ │ ├── index.ts │ │ │ ├── utils.ts │ │ │ ├── CollectionPage.types.ts │ │ │ └── CollectionPage.container.ts │ │ ├── AuthorizationModal │ │ │ ├── index.ts │ │ │ └── AuthorizationModal.types.ts │ │ └── CollectionProvider │ │ │ ├── index.ts │ │ │ ├── CollectionProvider.types.tsx │ │ │ └── CollectionProvider.tsx │ ├── setup.ts │ ├── react-app-env.d.ts │ ├── modules │ │ ├── vendor │ │ │ ├── decentraland │ │ │ │ ├── bid │ │ │ │ │ └── index.ts │ │ │ │ ├── land │ │ │ │ │ ├── index.ts │ │ │ │ │ └── api.ts │ │ │ │ ├── sale │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── account │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── order │ │ │ │ │ ├── index.ts │ │ │ │ │ └── api.ts │ │ │ │ ├── routing │ │ │ │ │ └── index.ts │ │ │ │ ├── collection │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── nft │ │ │ │ │ └── index.ts │ │ │ │ ├── item │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── super_rare │ │ │ │ ├── nft │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── routing │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── known_origin │ │ │ │ ├── edition │ │ │ │ │ ├── index.ts │ │ │ │ │ └── fragments.ts │ │ │ │ ├── nft │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── routing │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── token │ │ │ │ │ ├── index.ts │ │ │ │ │ └── fragments.ts │ │ │ │ ├── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── api.ts │ │ │ ├── makers_place │ │ │ │ ├── nft │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── routing │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── api.ts │ │ ├── nft │ │ │ ├── ens │ │ │ │ └── types.ts │ │ │ ├── wearable │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── parcel │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ └── utils.ts │ │ ├── routing │ │ │ ├── utils.ts │ │ │ └── reducer.ts │ │ ├── contract │ │ │ └── types.ts │ │ ├── proximity │ │ │ ├── types.ts │ │ │ ├── selectors.ts │ │ │ └── hooks.ts │ │ ├── ui │ │ │ ├── nft │ │ │ │ ├── partner │ │ │ │ │ └── types.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── reducer.ts │ │ │ ├── asset │ │ │ │ ├── homepage │ │ │ │ │ └── types.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── reducer.ts │ │ │ ├── browse │ │ │ │ └── types.ts │ │ │ ├── actions.ts │ │ │ ├── reducer.ts │ │ │ ├── utils.ts │ │ │ ├── types.ts │ │ │ └── sagas.ts │ │ ├── translation │ │ │ ├── locales │ │ │ │ └── index.ts │ │ │ └── sagas.ts │ │ ├── types.ts │ │ ├── item │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── account │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── collection │ │ │ └── utils.ts │ │ ├── bid │ │ │ └── selectors.ts │ │ ├── asset │ │ │ └── types.ts │ │ ├── store │ │ │ ├── selectors.ts │ │ │ └── types.ts │ │ ├── sale │ │ │ └── selectors.ts │ │ └── wallet │ │ │ └── selectors.ts │ ├── themes │ │ ├── components │ │ │ ├── Navigation.css │ │ │ ├── Popup.css │ │ │ ├── Field.css │ │ │ ├── Card.css │ │ │ ├── Radio.css │ │ │ └── Button.css │ │ └── index.ts │ ├── images │ │ ├── hero.png │ │ ├── back.svg │ │ ├── forward.svg │ │ ├── fullscreen.svg │ │ ├── road.svg │ │ ├── pin.svg │ │ ├── pin-mini.svg │ │ ├── pin-land.svg │ │ ├── jump_in.svg │ │ ├── user.svg │ │ ├── close.svg │ │ ├── search.svg │ │ ├── plaza.svg │ │ ├── wearables │ │ │ └── FacilHairIcon.svg │ │ └── filters.svg │ ├── lib │ │ ├── text.ts │ │ ├── environment.ts │ │ ├── timer.ts │ │ ├── mana.ts │ │ └── date.ts │ └── setupTests.ts ├── public │ ├── favicon.ico │ ├── super_rare.png │ ├── decentraland.png │ ├── known_origin.png │ ├── makers_place.png │ └── manifest.json ├── setupEnv.sh ├── .gitignore ├── README.md ├── tslint.json └── tsconfig.json ├── indexer └── src │ ├── data │ ├── README.md │ └── wearables │ │ ├── binance_us_collection.ts │ │ ├── Wearable.ts │ │ ├── rtfkt_x_atari.ts │ │ ├── winklevoss_capital.ts │ │ ├── categories.ts │ │ ├── dg_atari_dillon_francis.ts │ │ └── rac_basics.ts │ └── modules │ ├── order │ └── status.ts │ ├── category │ └── categories.ts │ ├── bid │ └── index.ts │ ├── network │ └── index.ts │ ├── utils │ └── index.ts │ ├── estate │ └── index.ts │ ├── catalyst │ └── index.ts │ ├── ens │ └── index.ts │ └── account │ └── index.ts ├── package.json ├── .gitlab-ci.yml ├── README.md └── LICENSE /webapp/.ci/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /indexer/src/data/README.md: -------------------------------------------------------------------------------- 1 | # Autogenerated 2 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Column/Column.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /webapp/src/setup.ts: -------------------------------------------------------------------------------- 1 | import { config } from 'dotenv' 2 | config() 3 | -------------------------------------------------------------------------------- /webapp/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/bid/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/land/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/sale/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/super_rare/nft/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/.ci/Pulumi.website-market-dev.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | aws:region: us-east-1 3 | -------------------------------------------------------------------------------- /webapp/.ci/Pulumi.website-market-prd.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | aws:region: us-east-1 3 | -------------------------------------------------------------------------------- /webapp/.ci/Pulumi.website-market-stg.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | aws:region: us-east-1 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/account/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/order/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/edition/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/nft/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/token/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/makers_place/nft/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/makers_place/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/super_rare/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types' 2 | -------------------------------------------------------------------------------- /webapp/src/components/Chip/index.ts: -------------------------------------------------------------------------------- 1 | import Chip from './Chip' 2 | export { Chip } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Row/index.ts: -------------------------------------------------------------------------------- 1 | import Row from './Row' 2 | export { Row } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Mana/index.ts: -------------------------------------------------------------------------------- 1 | import Mana from './Mana' 2 | export { Mana } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/index.ts: -------------------------------------------------------------------------------- 1 | import Menu from './Menu' 2 | export { Menu } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/collection/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/Box/index.ts: -------------------------------------------------------------------------------- 1 | import Box from './Box' 2 | export { Box } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/index.ts: -------------------------------------------------------------------------------- 1 | import Bid from './Bid.container' 2 | export { Bid } 3 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Name/index.ts: -------------------------------------------------------------------------------- 1 | import Name from './Name' 2 | export { Name } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Footer/index.ts: -------------------------------------------------------------------------------- 1 | import Footer from './Footer' 2 | export { Footer } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/nft/ens/types.ts: -------------------------------------------------------------------------------- 1 | export type ENS = { 2 | subdomain: string 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Navigation.css: -------------------------------------------------------------------------------- 1 | .dcl.tabs a { 2 | color: var(--text); 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Bids/index.ts: -------------------------------------------------------------------------------- 1 | import Bids from './Bids.container' 2 | export { Bids } 3 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Price/index.ts: -------------------------------------------------------------------------------- 1 | import Price from './Price' 2 | export { Price } 3 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/index.ts: -------------------------------------------------------------------------------- 1 | import BuyPage from './BuyPage' 2 | export { BuyPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Routes/index.ts: -------------------------------------------------------------------------------- 1 | import Routes from './Routes' 2 | 3 | export { Routes } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/index.ts: -------------------------------------------------------------------------------- 1 | import Sales from './Sales' 2 | 3 | export default Sales 4 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './VendorFactory' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/BidList/BidList.css: -------------------------------------------------------------------------------- 1 | .BidList .list { 2 | margin-top: 13px; 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/JumpIn/index.ts: -------------------------------------------------------------------------------- 1 | import JumpIn from './JumpIn' 2 | export { JumpIn } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Owner/index.ts: -------------------------------------------------------------------------------- 1 | import Owner from './Owner' 2 | export { Owner } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Atlas/Popup/index.ts: -------------------------------------------------------------------------------- 1 | import Popup from './Popup' 2 | export default Popup 3 | -------------------------------------------------------------------------------- /webapp/src/components/Atlas/index.ts: -------------------------------------------------------------------------------- 1 | import Atlas from './Atlas.container' 2 | export { Atlas } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Column/index.ts: -------------------------------------------------------------------------------- 1 | import Column from './Column' 2 | export { Column } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Navbar/index.ts: -------------------------------------------------------------------------------- 1 | import Navbar from './Navbar.container' 2 | export { Navbar } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Wallet/index.ts: -------------------------------------------------------------------------------- 1 | import Wallet from './Wallet.container' 2 | export { Wallet } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/super_rare/routing/types.ts: -------------------------------------------------------------------------------- 1 | export enum Section { 2 | ALL = 'all' 3 | } 4 | -------------------------------------------------------------------------------- /webapp/.ci/Pulumi.yaml: -------------------------------------------------------------------------------- 1 | name: market-static 2 | runtime: nodejs 3 | description: Website for the market 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ENSTags/index.ts: -------------------------------------------------------------------------------- 1 | import ENSTags from './ENSTags' 2 | export { ENSTags } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Network/index.ts: -------------------------------------------------------------------------------- 1 | import Network from './Network' 2 | export { Network } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Title/index.ts: -------------------------------------------------------------------------------- 1 | import Title from './Title' 2 | 3 | export default Title 4 | -------------------------------------------------------------------------------- /webapp/src/components/BidPage/index.ts: -------------------------------------------------------------------------------- 1 | import BidPage from './BidPage.container' 2 | export { BidPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/ManaField/index.ts: -------------------------------------------------------------------------------- 1 | import ManaField from './ManaField' 2 | export { ManaField } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/MenuItem/index.ts: -------------------------------------------------------------------------------- 1 | import MenuItem from './MenuItem' 2 | export { MenuItem } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/nft/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/makers_place/routing/types.ts: -------------------------------------------------------------------------------- 1 | export enum Section { 2 | ALL = 'all' 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Popup.css: -------------------------------------------------------------------------------- 1 | .ui.popup, 2 | .ui.inverted.popup { 3 | height: auto; 4 | } 5 | -------------------------------------------------------------------------------- /webapp/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/public/favicon.ico -------------------------------------------------------------------------------- /webapp/setupEnv.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | 5 | source dcl-env 6 | cp .ci/.env.${ENVIRONMENT} .env 7 | -------------------------------------------------------------------------------- /webapp/src/components/BidPage/BidModal/index.ts: -------------------------------------------------------------------------------- 1 | import BidModal from './BidModal' 2 | export { BidModal } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Collapsible/index.ts: -------------------------------------------------------------------------------- 1 | import Collapsible from './Collapsible' 2 | export { Collapsible } 3 | -------------------------------------------------------------------------------- /webapp/src/components/HomePage/index.ts: -------------------------------------------------------------------------------- 1 | import HomePage from './HomePage.container' 2 | export { HomePage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/IntroPopup/index.ts: -------------------------------------------------------------------------------- 1 | import IntroPopup from './IntroPopup' 2 | export { IntroPopup } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Navigation/index.ts: -------------------------------------------------------------------------------- 1 | import Navigation from './Navigation' 2 | export { Navigation } 3 | -------------------------------------------------------------------------------- /webapp/src/components/PageHeader/index.ts: -------------------------------------------------------------------------------- 1 | import PageHeader from './PageHeader' 2 | export { PageHeader } 3 | -------------------------------------------------------------------------------- /webapp/src/components/ScrollToTop/index.ts: -------------------------------------------------------------------------------- 1 | import ScrollToTop from './ScrollToTop' 2 | export { ScrollToTop } 3 | -------------------------------------------------------------------------------- /webapp/src/components/SellPage/index.ts: -------------------------------------------------------------------------------- 1 | import SellPage from './SellPage.container' 2 | export { SellPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/SignInPage/index.ts: -------------------------------------------------------------------------------- 1 | import SignInPage from './SignInPage' 2 | export { SignInPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTDetail/index.ts: -------------------------------------------------------------------------------- 1 | import NFTDetail from './NFTDetail' 2 | export { NFTDetail } 3 | -------------------------------------------------------------------------------- /webapp/src/images/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/src/images/hero.png -------------------------------------------------------------------------------- /webapp/src/modules/routing/utils.ts: -------------------------------------------------------------------------------- 1 | export const COLLECTIONS_PER_PAGE = 6 2 | export const SALES_PER_PAGE = 6 3 | -------------------------------------------------------------------------------- /webapp/public/super_rare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/public/super_rare.png -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/ToggleBox/index.ts: -------------------------------------------------------------------------------- 1 | import ToggleBox from './ToggleBox' 2 | export { ToggleBox } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/index.ts: -------------------------------------------------------------------------------- 1 | import AssetCard from './AssetCard.container' 2 | export { AssetCard } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetList/index.ts: -------------------------------------------------------------------------------- 1 | import AssetList from './AssetList.container' 2 | export { AssetList } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Actions/index.ts: -------------------------------------------------------------------------------- 1 | import Actions from './Actions.container' 2 | export { Actions } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/BidList/index.ts: -------------------------------------------------------------------------------- 1 | import BidList from './BidList.container' 2 | export { BidList } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ENSDetail/index.ts: -------------------------------------------------------------------------------- 1 | import ENSDetail from './ENSDetail' 2 | export { ENSDetail } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Highlight/index.ts: -------------------------------------------------------------------------------- 1 | import Highlight from './Highlight' 2 | export { Highlight } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Price/index.ts: -------------------------------------------------------------------------------- 1 | import Price from './Price.container' 2 | 3 | export default Price 4 | -------------------------------------------------------------------------------- /webapp/src/components/Coordinate/index.ts: -------------------------------------------------------------------------------- 1 | import Coordinate from './Coordinate' 2 | 3 | export { Coordinate } 4 | -------------------------------------------------------------------------------- /webapp/src/components/HomePage/Slideshow/index.ts: -------------------------------------------------------------------------------- 1 | import Slideshow from './Slideshow' 2 | export { Slideshow } 3 | -------------------------------------------------------------------------------- /webapp/src/components/LandsPage/index.ts: -------------------------------------------------------------------------------- 1 | import LandsPage from './LandsPage.container' 2 | export { LandsPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Stats/index.ts: -------------------------------------------------------------------------------- 1 | import Stats from './Stats.container' 2 | 3 | export default Stats 4 | -------------------------------------------------------------------------------- /webapp/src/components/SellPage/SellModal/index.ts: -------------------------------------------------------------------------------- 1 | import SellModal from './SellModal' 2 | export { SellModal } 3 | -------------------------------------------------------------------------------- /webapp/public/decentraland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/public/decentraland.png -------------------------------------------------------------------------------- /webapp/public/known_origin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/public/known_origin.png -------------------------------------------------------------------------------- /webapp/public/makers_place.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/marketplace/master/webapp/public/makers_place.png -------------------------------------------------------------------------------- /webapp/src/components/AccountPage/index.ts: -------------------------------------------------------------------------------- 1 | import AccountPage from './AccountPage.container' 2 | export { AccountPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetAction/index.ts: -------------------------------------------------------------------------------- 1 | import AssetAction from './AssetAction.container' 2 | export { AssetAction } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/index.ts: -------------------------------------------------------------------------------- 1 | import AssetBrowse from './AssetBrowse.container' 2 | export { AssetBrowse } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/EstateTags/index.ts: -------------------------------------------------------------------------------- 1 | import EstateTags from './EstateTags' 2 | export { EstateTags } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ParcelTags/index.ts: -------------------------------------------------------------------------------- 1 | import ParcelTags from './ParcelTags' 2 | export { ParcelTags } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetImage/index.ts: -------------------------------------------------------------------------------- 1 | import AssetImage from './AssetImage.container' 2 | export { AssetImage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Description/Description.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | text?: string | null 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Description/index.ts: -------------------------------------------------------------------------------- 1 | import Description from './Description' 2 | export { Description } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Expiration/Expiration.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | color: var(--secondary-text); 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Highlights/index.ts: -------------------------------------------------------------------------------- 1 | import Highlights from './Highlights' 2 | export { Highlights } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/index.ts: -------------------------------------------------------------------------------- 1 | import AssetPage from './AssetPage.container' 2 | 3 | export { AssetPage } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/AcceptButton/index.ts: -------------------------------------------------------------------------------- 1 | import AcceptButton from './AcceptButton' 2 | export { AcceptButton } 3 | -------------------------------------------------------------------------------- /webapp/src/components/BrowsePage/index.ts: -------------------------------------------------------------------------------- 1 | import BrowsePage from './BrowsePage.container' 2 | export { BrowsePage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/ExternalLinkModal/ExternalLinkModal.css: -------------------------------------------------------------------------------- 1 | .ExternalLinkModal .bold { 2 | font-weight: 600; 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/LegacyNFTPage/index.ts: -------------------------------------------------------------------------------- 1 | import LegacyNFTPage from './LegacyNFTPage' 2 | export { LegacyNFTPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/ListedBadge/index.ts: -------------------------------------------------------------------------------- 1 | import ListedBadge from './ListedBadge' 2 | 3 | export default ListedBadge 4 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | import DropdownMenu from './DropdownMenu' 2 | export { DropdownMenu } 3 | -------------------------------------------------------------------------------- /webapp/src/components/UserMenu/index.ts: -------------------------------------------------------------------------------- 1 | import UserMenu from './UserMenu.container' 2 | 3 | export default UserMenu 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTSections/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSections from './NFTSections' 2 | export { NFTSections } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/contract/types.ts: -------------------------------------------------------------------------------- 1 | export enum Network { 2 | ROPSTEN = 'ropsten', 3 | MAINNET = 'mainnet' 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/Transaction/index.ts: -------------------------------------------------------------------------------- 1 | import Transaction from './Transaction' 2 | export { Transaction } 3 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/index.ts: -------------------------------------------------------------------------------- 1 | import ActivityPage from './ActivityPage.container' 2 | export { ActivityPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/WearableTags/index.ts: -------------------------------------------------------------------------------- 1 | import WearableTags from './WearableTags' 2 | export { WearableTags } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/BaseDetail/index.ts: -------------------------------------------------------------------------------- 1 | import BaseDetail from './BaseDetail' 2 | 3 | export default BaseDetail 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Collection/index.ts: -------------------------------------------------------------------------------- 1 | import Collection from './Collection' 2 | 3 | export default Collection 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/IconBadge/index.ts: -------------------------------------------------------------------------------- 1 | import IconBadge from './IconBadge' 2 | 3 | export default IconBadge 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/WearableDetail/WearableDetail.module.css: -------------------------------------------------------------------------------- 1 | .issued { 2 | color: var(--secondary-text); 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionImage/CollectionImage.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | contractAddress: string 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/AssetCell/index.ts: -------------------------------------------------------------------------------- 1 | import AssetCell from './AssetCell' 2 | 3 | export default AssetCell 4 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/index.ts: -------------------------------------------------------------------------------- 1 | import OnSaleList from './OnSaleList.container' 2 | 3 | export default OnSaleList 4 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Activity/index.ts: -------------------------------------------------------------------------------- 1 | import Activity from './Activity.container' 2 | 3 | export default Activity 4 | -------------------------------------------------------------------------------- /webapp/src/components/SettingsPage/index.ts: -------------------------------------------------------------------------------- 1 | import SettingsPage from './SettingsPage.container' 2 | export { SettingsPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/TextInput/index.ts: -------------------------------------------------------------------------------- 1 | import TextInput from './TextInput' 2 | 3 | export default TextInput 4 | -------------------------------------------------------------------------------- /webapp/src/components/TransferPage/index.ts: -------------------------------------------------------------------------------- 1 | import TransferPage from './TransferPage.container' 2 | export { TransferPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/index.ts: -------------------------------------------------------------------------------- 1 | import NFTFilters from './NFTFilters.container' 2 | export { NFTFilters } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSidebar from './NFTSidebar.container' 2 | export { NFTSidebar } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/VendorMenu/index.ts: -------------------------------------------------------------------------------- 1 | import VendorMenu from './VendorMenu.container' 2 | export { VendorMenu } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/nft/wearable/types.ts: -------------------------------------------------------------------------------- 1 | export enum WearableGender { 2 | MALE = 'male', 3 | FEMALE = 'female' 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/land/api.ts: -------------------------------------------------------------------------------- 1 | export const ATLAS_SERVER_URL = process.env.REACT_APP_ATLAS_SERVER_URL! 2 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ErrorBoundary/index.ts: -------------------------------------------------------------------------------- 1 | import ErrorBoundary from './ErrorBoundary' 2 | export { ErrorBoundary } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/EstateDetail/index.ts: -------------------------------------------------------------------------------- 1 | import EstateDetail from './EstateDetail' 2 | 3 | export { EstateDetail } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ParcelDetail/index.ts: -------------------------------------------------------------------------------- 1 | import ParcelDetail from './ParcelDetail' 2 | 3 | export { ParcelDetail } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetProvider/index.ts: -------------------------------------------------------------------------------- 1 | import AssetProvider from './AssetProvider.container' 2 | export { AssetProvider } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/WarningMessage/index.ts: -------------------------------------------------------------------------------- 1 | import WarningMessage from './WarningMessage' 2 | export { WarningMessage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/BuyNFTModal/index.ts: -------------------------------------------------------------------------------- 1 | import BuyNFTModal from './BuyNFTModal.containter' 2 | export { BuyNFTModal } 3 | -------------------------------------------------------------------------------- /webapp/src/components/PartnersSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import PartnersSidebar from './PartnersSidebar' 2 | export { PartnersSidebar } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/FiltersMenu/index.ts: -------------------------------------------------------------------------------- 1 | import FiltersMenu from './FiltersMenu' 2 | export { FiltersMenu } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/TextFilter/index.ts: -------------------------------------------------------------------------------- 1 | import TextFilter from './TextFilter' 2 | 3 | export { TextFilter } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSections/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSections from './NFTSections' 2 | export { NFTSections } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSidebar from './NFTSidebar' 2 | export { NFTSidebar } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/known_origin/NFTSections/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSections from './NFTSections' 2 | export { NFTSections } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/types.ts: -------------------------------------------------------------------------------- 1 | export enum AssetType { 2 | TOKEN = 'token', 3 | EDITION = 'edition' 4 | } 5 | -------------------------------------------------------------------------------- /indexer/src/modules/order/status.ts: -------------------------------------------------------------------------------- 1 | export const OPEN = 'open' 2 | export const SOLD = 'sold' 3 | export const CANCELLED = 'cancelled' 4 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import AccountSidebar from './AccountSidebar.container' 2 | export { AccountSidebar } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Expiration/index.ts: -------------------------------------------------------------------------------- 1 | import Expiration from './Expiration.container' 2 | 3 | export default Expiration 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ItemDetail/index.ts: -------------------------------------------------------------------------------- 1 | import ItemDetail from './ItemDetail.container' 2 | 3 | export { ItemDetail } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/WearableDetail/index.ts: -------------------------------------------------------------------------------- 1 | import WearableDetail from './WearableDetail' 2 | export { WearableDetail } 3 | -------------------------------------------------------------------------------- /webapp/src/components/CancelSalePage/index.ts: -------------------------------------------------------------------------------- 1 | import CancelSalePage from './CancelSalePage.container' 2 | export { CancelSalePage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionImage/index.ts: -------------------------------------------------------------------------------- 1 | import CollectionImage from './CollectionImage' 2 | 3 | export default CollectionImage 4 | -------------------------------------------------------------------------------- /webapp/src/components/IntroPopup/IntroPopup.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = {} 2 | 3 | export type State = { 4 | open: boolean 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/CoverPicker/index.ts: -------------------------------------------------------------------------------- 1 | import CoverPicker from './CoverPicker' 2 | 3 | export default CoverPicker 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/ArrayFilter/index.ts: -------------------------------------------------------------------------------- 1 | import ArrayFilter from './ArrayFilter' 2 | 3 | export { ArrayFilter } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/super_rare/NFTFilters/index.ts: -------------------------------------------------------------------------------- 1 | import NFTFilters from './NFTFilters.container' 2 | export { NFTFilters } 3 | -------------------------------------------------------------------------------- /webapp/src/lib/text.ts: -------------------------------------------------------------------------------- 1 | export function capitalize(str: string) { 2 | return str[0].toUpperCase() + str.slice(1).toLowerCase() 3 | } 4 | -------------------------------------------------------------------------------- /webapp/src/modules/proximity/types.ts: -------------------------------------------------------------------------------- 1 | export type Proximity = { 2 | district?: number 3 | road?: number 4 | plaza?: number 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ProximityTags/index.ts: -------------------------------------------------------------------------------- 1 | import ProximityTags from './ProximityTags.container' 2 | export { ProximityTags } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/AssetPage.css: -------------------------------------------------------------------------------- 1 | .AssetPage { 2 | margin-top: 39px; 3 | } 4 | 5 | .AssetPage .back { 6 | top: 5px; 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/GenderBadge/index.ts: -------------------------------------------------------------------------------- 1 | import GenderBadge from './GenderBadge.container' 2 | 3 | export default GenderBadge 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/JumpIn/JumpIn.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | x: number 3 | y: number 4 | className?: string 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/RarityBadge/index.ts: -------------------------------------------------------------------------------- 1 | import RarityBadge from './RarityBadge.container' 2 | 3 | export default RarityBadge 4 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/MintItemModal/index.ts: -------------------------------------------------------------------------------- 1 | import MintItemModal from './MintItemModal.containter' 2 | export { MintItemModal } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Coordinate/Coordinate.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | x: number 3 | y: number 4 | className?: string 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/ExternalLinkModal/ExternalLinkModal.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | link: string 3 | onClose: () => void 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/components/PageHeader/PageHeader.css: -------------------------------------------------------------------------------- 1 | .PageHeader { 2 | height: var(--page-header-height); 3 | margin-bottom: 35px; 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/index.ts: -------------------------------------------------------------------------------- 1 | import StoreSettings from './StoreSettings.container' 2 | 3 | export default StoreSettings 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/SelectFilter/index.ts: -------------------------------------------------------------------------------- 1 | import SelectFilter from './SelectFilter' 2 | 3 | export { SelectFilter } 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTFilters/index.ts: -------------------------------------------------------------------------------- 1 | import NFTFilters from './NFTFilters.container' 2 | export { NFTFilters } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/known_origin/NFTFilters/index.ts: -------------------------------------------------------------------------------- 1 | import NFTFilters from './NFTFilters.container' 2 | export { NFTFilters } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/makers_place/NFTFilters/index.ts: -------------------------------------------------------------------------------- 1 | import NFTFilters from './NFTFilters.container' 2 | export { NFTFilters } 3 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Field.css: -------------------------------------------------------------------------------- 1 | .ui.form .dcl.field .ui.input input { 2 | color: var(--text); 3 | background: transparent; 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/components/AssetProviderPage/index.ts: -------------------------------------------------------------------------------- 1 | import AssetProviderPage from './AssetProviderPage.container' 2 | export { AssetProviderPage } 3 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionList/index.ts: -------------------------------------------------------------------------------- 1 | import CollectionList from './CollectionList.container' 2 | 3 | export default CollectionList 4 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionPage/index.ts: -------------------------------------------------------------------------------- 1 | import CollectionPage from './CollectionPage.container' 2 | 3 | export default CollectionPage 4 | -------------------------------------------------------------------------------- /webapp/src/components/ExternalLinkModal/index.ts: -------------------------------------------------------------------------------- 1 | import ExternalLinkModal from './ExternalLinkModal' 2 | 3 | export default ExternalLinkModal 4 | -------------------------------------------------------------------------------- /webapp/src/components/SettingsPage/Authorization/index.ts: -------------------------------------------------------------------------------- 1 | import Authorization from './Authorization.container' 2 | export { Authorization } 3 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/InputContainer/index.ts: -------------------------------------------------------------------------------- 1 | import InputContainer from './InputContainer' 2 | 3 | export default InputContainer 4 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/nft/partner/types.ts: -------------------------------------------------------------------------------- 1 | import { PartnerUIState } from './reducer' 2 | 3 | export type PartnerView = keyof PartnerUIState 4 | -------------------------------------------------------------------------------- /webapp/src/components/AccountPage/AccountBanner/index.ts: -------------------------------------------------------------------------------- 1 | import AccountBanner from './AccountBanner.container' 2 | 3 | export default AccountBanner 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/CategoryBadge/index.ts: -------------------------------------------------------------------------------- 1 | import CategoryBadge from './CategoryBadge.container' 2 | 3 | export default CategoryBadge 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Highlights/Highlights.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | className?: string 3 | children: React.ReactNode 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/TransactionHistory/index.ts: -------------------------------------------------------------------------------- 1 | import TransactionHistory from './TransactionHistory' 2 | export { TransactionHistory } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AuthorizationModal/index.ts: -------------------------------------------------------------------------------- 1 | import AuthorizationModal from './AuthorizationModal.container' 2 | export { AuthorizationModal } 3 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/asset/homepage/types.ts: -------------------------------------------------------------------------------- 1 | import { HomepageUIState } from './reducer' 2 | 3 | export type HomepageView = keyof HomepageUIState 4 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/nft/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../../reducer' 2 | 3 | export const getState = (state: RootState) => state.ui.nft 4 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/super_rare/nft/types.ts: -------------------------------------------------------------------------------- 1 | export type NFTsFetchFilters = {} 2 | 3 | export type NFTData = { 4 | description: string 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ErrorBoundary/ErrorBoundary.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = {} 2 | 3 | export type State = { 4 | hasError: boolean 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/IconBadge/IconBadge.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | icon: string 3 | text: string 4 | onClick: () => void 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/OnSaleListElement/index.ts: -------------------------------------------------------------------------------- 1 | import OnSaleListElement from './OnSaleListElement' 2 | 3 | export default OnSaleListElement 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/PriceChangeNotice/index.ts: -------------------------------------------------------------------------------- 1 | import PriceChangeNotice from './PriceChangeNotice.container' 2 | export { PriceChangeNotice } 3 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSidebar/NFTSidebar.css: -------------------------------------------------------------------------------- 1 | .NFTSidebar > .ui.header.sub { 2 | margin-top: 3px; 3 | margin-bottom: 22px; 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/asset/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../../reducer' 2 | 3 | export const getState = (state: RootState) => state.ui.asset 4 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/makers_place/nft/types.ts: -------------------------------------------------------------------------------- 1 | export type NFTsFetchFilters = {} 2 | 3 | export type NFTData = { 4 | description: string 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/Transaction/TransactionDetail/index.ts: -------------------------------------------------------------------------------- 1 | import TransactionDetail from './TransactionDetail' 2 | export { TransactionDetail } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ENSTags/ENSTags.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | 3 | export type Props = { 4 | nft: NFT 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/BuyPage.types.ts: -------------------------------------------------------------------------------- 1 | import { AssetType } from '../../modules/asset/types' 2 | 3 | export type Props = { 4 | type: AssetType 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Name/Name.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionProvider/index.ts: -------------------------------------------------------------------------------- 1 | import CollectionProvider from './CollectionProvider.container' 2 | 3 | export default CollectionProvider 4 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTDetail/NFTDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | 3 | export type Props = { 4 | nft: NFT 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/sale/types.ts: -------------------------------------------------------------------------------- 1 | import { Sale } from '@dcl/schemas' 2 | 3 | export type SaleResponse = { data: Sale[]; total: number } 4 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/routing/types.ts: -------------------------------------------------------------------------------- 1 | export enum Section { 2 | ALL = 'all', 3 | EDITIONS = 'editions', 4 | TOKENS = 'tokens' 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Owner/Owner.types.tsx: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ProximityHighlights/index.ts: -------------------------------------------------------------------------------- 1 | import ProximityHighlights from './ProximityHighlights.container' 2 | export { ProximityHighlights } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Title/Title.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Mana/Mana.types.ts: -------------------------------------------------------------------------------- 1 | import { ManaProps } from 'decentraland-ui' 2 | 3 | export type Props = ManaProps & { 4 | withTooltip?: boolean 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/Menu.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | className?: string 5 | children: React.ReactNode 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/EstateDetail/ParcelCoordinates/index.ts: -------------------------------------------------------------------------------- 1 | import ParcelCoordinates from './ParcelCoordinates.container' 2 | export { ParcelCoordinates } 3 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Network/Network.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Atlas/Atlas.css: -------------------------------------------------------------------------------- 1 | .atlas-wrapper { 2 | position: absolute !important; 3 | top: 0px; 4 | left: 0px; 5 | right: 0px; 6 | bottom: 0px; 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Price/Price.types.ts: -------------------------------------------------------------------------------- 1 | import { Network } from '@dcl/schemas' 2 | 3 | export type Props = { 4 | network: Network 5 | price: string 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/account/types.ts: -------------------------------------------------------------------------------- 1 | import { Account } from '@dcl/schemas' 2 | 3 | export type AccountResponse = { data: Account[]; total: number } 4 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/CurrentAccountSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import CurrentAccountSidebar from './CurrentAccountSidebar' 2 | 3 | export default CurrentAccountSidebar 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Collection/Collection.types.tsx: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/AssetCell/AssetCell.types.tsx: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/PartnersSidebar/PartnersSidebar.css: -------------------------------------------------------------------------------- 1 | .PartnersSidebar { 2 | padding-top: 10px; 3 | } 4 | 5 | .PartnersSidebar ul.Menu { 6 | margin-top: 30px; 7 | } 8 | -------------------------------------------------------------------------------- /indexer/src/modules/category/categories.ts: -------------------------------------------------------------------------------- 1 | export const PARCEL = 'parcel' 2 | export const ESTATE = 'estate' 3 | export const WEARABLE = 'wearable' 4 | export const ENS = 'ens' 5 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/OtherAccountSidebar/index.ts: -------------------------------------------------------------------------------- 1 | import OtherAccountSidebar from './OtherAccountSidebar.container' 2 | 3 | export default OtherAccountSidebar 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Description/Description.css: -------------------------------------------------------------------------------- 1 | .Description .description-text { 2 | font-size: 17px; 3 | line-height: 26px; 4 | letter-spacing: 0.2px; 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Collapsible/Collapsible.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | children: React.ReactNode 5 | collapsedHeight: number 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/DropdownMenu/DropdownMenu.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | values: T[] 3 | currentValue?: T 4 | onMenuItemClick: (value: T) => void 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/modules/translation/locales/index.ts: -------------------------------------------------------------------------------- 1 | const en = require('./en.json') 2 | const es = require('./es.json') 3 | const zh = require('./zh.json') 4 | export { en, es, zh } 5 | -------------------------------------------------------------------------------- /webapp/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Decentraland Market", 3 | "name": "Decentraland Market", 4 | "background_color": "#18141a", 5 | "theme_color": "#18141a" 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/CoverPicker/CoverPicker.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | src?: string 3 | onChange: (src?: string, name?: string, size?: number) => void 4 | } 5 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/decentraland/collection/types.ts: -------------------------------------------------------------------------------- 1 | import { Collection } from '@dcl/schemas' 2 | 3 | export type CollectionResponse = { data: Collection[]; total: number } 4 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Card.css: -------------------------------------------------------------------------------- 1 | .ui.cards a.card:hover, 2 | .ui.link.card:hover, 3 | .ui.link.cards .card:hover, 4 | a.ui.card:hover { 5 | background-color: var(--card); 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/CancelSalePage/CancelSalePage.css: -------------------------------------------------------------------------------- 1 | .CancelSalePage .ui.header { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .CancelSalePage .subtitle { 6 | margin-bottom: 32px; 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/SignInPage/SignInPage.css: -------------------------------------------------------------------------------- 1 | .SignInPage { 2 | display: flex; 3 | justify-content: center; 4 | } 5 | 6 | .SignInPage .SignIn.center { 7 | position: relative; 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/InputContainer/InputContainer.css: -------------------------------------------------------------------------------- 1 | .InputContainer .title { 2 | color: var(--secondary-text); 3 | margin-bottom: 8px; 4 | font-size: 15px; 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/TextInput/TextInput.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | type: 'input' | 'textarea' 3 | value: string 4 | onChange: (newValue: string) => void 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSections/NFTSectionsMenuItems/index.ts: -------------------------------------------------------------------------------- 1 | import NFTSectionsMenuItems from './NFTSectionsMenuItems' 2 | 3 | export default NFTSectionsMenuItems 4 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/InputContainer/InputContainer.types.ts: -------------------------------------------------------------------------------- 1 | import { ReactNode } from 'react' 2 | 3 | export type Props = { 4 | title: string 5 | children: ReactNode 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/WarningMessage/WarningMessage.css: -------------------------------------------------------------------------------- 1 | .WarningMessage { 2 | padding: 16px; 3 | color: var(--danger); 4 | text-align: center; 5 | border-top: 1px solid var(--divider); 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/LandsPage/LandsPage.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | isFullscreen: boolean 3 | isMap: boolean 4 | } 5 | 6 | export type MapStateProps = Pick 7 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/Transaction/Transaction.types.ts: -------------------------------------------------------------------------------- 1 | import { Transaction } from 'decentraland-dapps/dist/modules/transaction/types' 2 | 3 | export type Props = { 4 | tx: Transaction 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Actions/Actions.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 8px; 5 | } 6 | 7 | .container:empty { 8 | display: none; 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/components/ListedBadge/ListedBadge.module.css: -------------------------------------------------------------------------------- 1 | .badge { 2 | color: white; 3 | width: 32px; 4 | height: 32px; 5 | } 6 | 7 | .icon { 8 | position: relative; 9 | right: 2px; 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/components/PageHeader/PageHeader.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | style?: React.CSSProperties 5 | className?: string 6 | children: React.ReactNode 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/PartnersSidebar/PartnersSidebar.types.ts: -------------------------------------------------------------------------------- 1 | import { VendorName } from '../../modules/vendor/types' 2 | 3 | export type Props = { 4 | onMenuItemClick: (vendor: VendorName) => void 5 | } 6 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/TextFilter/TextFilter.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | name?: string 3 | placeholder?: string 4 | value: string 5 | onChange: (newValue: string) => void 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Expiration/Expiration.types.ts: -------------------------------------------------------------------------------- 1 | import { Order } from "@dcl/schemas" 2 | 3 | export type Props = { 4 | order?: Order 5 | } 6 | 7 | export type MapStateProps = Pick 8 | -------------------------------------------------------------------------------- /webapp/src/components/ManaField/ManaField.types.ts: -------------------------------------------------------------------------------- 1 | import { Network } from '@dcl/schemas' 2 | import { FieldProps } from 'decentraland-ui' 3 | 4 | export type Props = FieldProps & { 5 | network: Network 6 | } 7 | -------------------------------------------------------------------------------- /indexer/src/modules/bid/index.ts: -------------------------------------------------------------------------------- 1 | export function getBidId( 2 | contractAddress: string, 3 | tokenId: string, 4 | bidder: string 5 | ): string { 6 | return contractAddress + '-' + tokenId + '-' + bidder 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/WearableTags/WearableTags.types.ts: -------------------------------------------------------------------------------- 1 | import { Item } from '@dcl/schemas' 2 | import { NFT } from '../../../modules/nft/types' 3 | 4 | export type Props = { 5 | asset: NFT | Item 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSections/NFTSectionsMenuItems/NFTSectionsMenuItems.types.tsx: -------------------------------------------------------------------------------- 1 | import { Props as NFTSectionsProps } from '../NFTSections.types' 2 | 3 | export type Props = NFTSectionsProps 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Highlight/Highlight.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | icon: React.ReactNode 5 | name: string 6 | description?: string 7 | onClick?: () => void 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ItemDetail/ItemDetail.module.css: -------------------------------------------------------------------------------- 1 | .supply { 2 | color: var(--secondary-text); 3 | } 4 | 5 | .ownerButtons { 6 | display: flex; 7 | flex-direction: column; 8 | gap: 8px; 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionPage/utils.ts: -------------------------------------------------------------------------------- 1 | import { Props } from './CollectionPage.types' 2 | 3 | export const getContractAddressFromProps = (props: Props) => 4 | (props.match!.params as any).contractAddress as string 5 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/Box/Box.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | header?: string 5 | className?: string 6 | children: React.ReactNode 7 | childrenClassName?: string 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/WarningMessage/WarningMessage.types.ts: -------------------------------------------------------------------------------- 1 | import { Bid } from '@dcl/schemas' 2 | import { NFT } from '../../../modules/nft/types' 3 | 4 | export type Props = { 5 | nft: NFT | null 6 | bid: Bid 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/BuyPage.css: -------------------------------------------------------------------------------- 1 | .BuyPage .ui.header { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .BuyPage .buttons { 6 | margin-top: 32px; 7 | } 8 | 9 | .BuyPage .error { 10 | color: var(--danger); 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/components/Coordinate/Coordinate.module.css: -------------------------------------------------------------------------------- 1 | .pin { 2 | background-image: url(../../images/pin-land.svg); 3 | width: 17px; 4 | height: 16px; 5 | background-size: 19px; 6 | background-position: -2px -1px; 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Row/Row.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | className?: string 5 | children: React.ReactNode 6 | onClick?: (event: React.MouseEvent) => void 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/PriceChangeNotice/PriceChangeNotice.types.ts: -------------------------------------------------------------------------------- 1 | import { View } from '../../../modules/ui/types' 2 | 3 | export type Props = { 4 | view?: View 5 | } 6 | 7 | export type MapStateProps = Pick 8 | -------------------------------------------------------------------------------- /indexer/src/modules/network/index.ts: -------------------------------------------------------------------------------- 1 | import { dataSource } from '@graphprotocol/graph-ts' 2 | 3 | export function getURNNetwork(): string { 4 | let network = dataSource.network() 5 | return network == "mainnet" ? "ethereum" : network 6 | } -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Title/Title.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | font-size: 34px; 3 | font-style: normal; 4 | font-weight: 600; 5 | line-height: 42px; 6 | letter-spacing: 0.4000000059604645px; 7 | text-align: left; 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/TextInput/TextInput.css: -------------------------------------------------------------------------------- 1 | .TextInput { 2 | all: unset; 3 | box-sizing: border-box; 4 | padding: 10px 12px; 5 | border: 1px solid var(--secondary); 6 | border-radius: 6px; 7 | width: 100%; 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/ArrayFilter/ArrayFilter.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | name: string 3 | values: string[] 4 | options: { value: string; text: string }[] 5 | onChange: (newValues: string[]) => void 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/modules/types.ts: -------------------------------------------------------------------------------- 1 | export type Await = T extends { 2 | then(onfulfilled?: (value: infer U) => unknown): unknown 3 | } 4 | ? U 5 | : T 6 | 7 | export type AwaitFn any> = Await> 8 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/nft/types.ts: -------------------------------------------------------------------------------- 1 | export type NFTsFetchFilters = { 2 | isEdition: boolean 3 | isToken: boolean 4 | } 5 | 6 | export type NFTData = { 7 | description: string 8 | isEdition: boolean 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/modules/nft/parcel/types.ts: -------------------------------------------------------------------------------- 1 | export type Parcel = { 2 | x: string 3 | y: string 4 | data: { 5 | description: string 6 | } | null 7 | estate: { 8 | tokenId: string 9 | name: string 10 | } | null 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ENSDetail/ENSDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/Bid/AcceptButton/AcceptButton.types.ts: -------------------------------------------------------------------------------- 1 | import { Bid } from '@dcl/schemas' 2 | import { NFT } from '../../../modules/nft/types' 3 | 4 | export type Props = { 5 | nft: NFT | null 6 | bid: Bid 7 | onClick: () => void 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/EstateTags/EstateTags.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/modules/item/types.ts: -------------------------------------------------------------------------------- 1 | import { View } from '../ui/types' 2 | import { ItemFilters } from '../vendor/decentraland/item/types' 3 | 4 | export type ItemBrowseOptions = { 5 | view?: View 6 | page?: number 7 | filters?: ItemFilters 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/EstateDetail/EstateDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ParcelDetail/ParcelDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/WearableDetail/WearableDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/SelectFilter/SelectFilter.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | name: string 3 | value: string 4 | clearable?: boolean 5 | options: { value: string; text: string }[] 6 | onChange: (newValue: string) => void 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/CurrentAccountSidebar/CurrentAccountSidebar.types.tsx: -------------------------------------------------------------------------------- 1 | import { VendorName } from '../../../modules/vendor' 2 | 3 | export type Props = { 4 | section: string 5 | onBrowse: (vendor: VendorName, section: string) => void 6 | } 7 | -------------------------------------------------------------------------------- /webapp/src/lib/environment.ts: -------------------------------------------------------------------------------- 1 | export const environment = process.env.REACT_APP_ENVIRONMENT 2 | export const isDevelopment = 3 | window.location.hostname === 'localhost' || environment === 'development' 4 | export const peerUrl = process.env.REACT_APP_PEER_URL! 5 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/AssetPage.types.ts: -------------------------------------------------------------------------------- 1 | import { AssetType } from '../../modules/asset/types' 2 | 3 | export type Props = { 4 | type: AssetType 5 | onBack: (location?: string) => void 6 | } 7 | 8 | export type MapDispatchProps = Pick 9 | -------------------------------------------------------------------------------- /webapp/src/components/LegacyNFTPage/LegacyNFTPage.types.ts: -------------------------------------------------------------------------------- 1 | import { RouteComponentProps } from 'react-router' 2 | 3 | type Params = { 4 | estateId?: string 5 | x?: string 6 | y?: string 7 | } 8 | 9 | export type Props = RouteComponentProps 10 | -------------------------------------------------------------------------------- /webapp/src/modules/translation/sagas.ts: -------------------------------------------------------------------------------- 1 | import { createTranslationSaga } from 'decentraland-dapps/dist/modules/translation/sagas' 2 | import * as translations from './locales' 3 | 4 | export const translationSaga = createTranslationSaga({ 5 | translations 6 | }) 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/TransactionHistory/TransactionHistory.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset | null 5 | } 6 | 7 | export type MapStateProps = {} 8 | export type MapDispatchProps = {} 9 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ParcelTags/ParcelTags.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '../../../modules/nft/types' 2 | import { VendorName } from '../../../modules/vendor/types' 3 | 4 | export type Props = { 5 | nft: NFT 6 | className?: string 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTSections/NFTSections.types.ts: -------------------------------------------------------------------------------- 1 | import { VendorName } from '../../../modules/vendor/types' 2 | 3 | export type Props = { 4 | vendor: VendorName 5 | address?: string 6 | section?: string 7 | onSectionClick: (section: string) => void 8 | } 9 | -------------------------------------------------------------------------------- /webapp/src/components/HomePage/Slideshow/Slideshow.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | title: string 5 | assets: Asset[] 6 | isSubHeader?: boolean 7 | isLoading: boolean 8 | onViewAll: () => void 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSidebar/NFTSidebar.types.ts: -------------------------------------------------------------------------------- 1 | import { Section } from '../../../../modules/vendor/decentraland/routing/types' 2 | 3 | export type Props = { 4 | section: Section 5 | sections: Section[] 6 | onMenuItemClick: (section: Section) => void 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/known_origin/NFTSections/NFTSections.types.ts: -------------------------------------------------------------------------------- 1 | import { Section } from '../../../../modules/vendor/known_origin/routing/types' 2 | 3 | export type Props = { 4 | section?: Section 5 | address?: string 6 | onSectionClick: (section: Section) => void 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/Wallet/Wallet.css: -------------------------------------------------------------------------------- 1 | .wallet-center { 2 | position: relative; 3 | top: 100px; 4 | bottom: 0px; 5 | left: 0px; 6 | right: 0px; 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | height: calc(100vh - 350px); 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/modules/nft/parcel/utils.ts: -------------------------------------------------------------------------------- 1 | export function getId(x: number | string, y: number | string) { 2 | return x + ',' + y 3 | } 4 | 5 | export function buildExplorerUrl(x: string | number, y: string | number) { 6 | return `https://play.decentraland.org/?position=${x},${y}` 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ParcelDetail/ParcelDetail.module.css: -------------------------------------------------------------------------------- 1 | .estateInfo { 2 | overflow: hidden; 3 | text-overflow: ellipsis; 4 | white-space: nowrap; 5 | font-size: 20px; 6 | line-height: 30px; 7 | color: var(--secondary-text); 8 | margin-bottom: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSections/NFTSections.types.ts: -------------------------------------------------------------------------------- 1 | import { Section } from '../../../../modules/vendor/decentraland/routing/types' 2 | 3 | export type Props = { 4 | section?: Section 5 | sections: Section[] 6 | onSectionClick: (section: Section) => void 7 | } 8 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/browse/types.ts: -------------------------------------------------------------------------------- 1 | import { Item, Order } from '@dcl/schemas' 2 | import { NFT } from '../../nft/types' 3 | import { VendorName } from '../../vendor' 4 | 5 | export type OnSaleNFT = [NFT, Order] 6 | 7 | export type OnSaleElement = Item | OnSaleNFT 8 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Price/Price.types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../../../modules/asset/types' 2 | 3 | export type Props = { 4 | asset: Asset 5 | price?: string 6 | } 7 | 8 | export type MapStateProps = Pick 9 | export type OwnProps = Pick 10 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/MenuItem/MenuItem.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | className?: string 3 | value: T 4 | currentValue?: T 5 | subtitle?: string 6 | image?: string 7 | nestedLevel?: number 8 | withCaret?: boolean 9 | onClick: (value: T) => void 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/RarityBadge/RarityBadge.module.css: -------------------------------------------------------------------------------- 1 | .badge { 2 | display: inline-flex; 3 | align-items: center; 4 | text-transform: uppercase; 5 | padding: 4px 12px; 6 | border-radius: 5px; 7 | cursor: pointer; 8 | } 9 | 10 | .text { 11 | font-size: 15px; 12 | } 13 | -------------------------------------------------------------------------------- /webapp/src/components/AssetProviderPage/AssetProviderPage.module.css: -------------------------------------------------------------------------------- 1 | .center { 2 | position: relative; 3 | top: 100px; 4 | bottom: 0px; 5 | left: 0px; 6 | right: 0px; 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | height: calc(100vh - 350px); 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Sales.css: -------------------------------------------------------------------------------- 1 | /* Header with filters */ 2 | 3 | .Sales .header-with-filter { 4 | display: flex; 5 | justify-content: space-between; 6 | align-items: center; 7 | height: 44px; 8 | } 9 | 10 | .Sales .header-with-filter .ui.header { 11 | margin-bottom: unset; 12 | } 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "marketplace", 3 | "version": "2.7.0", 4 | "description": "Decentraland's Marketplace", 5 | "main": "index.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/decentraland/marketplace.git" 9 | }, 10 | "dependencies": {} 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Radio.css: -------------------------------------------------------------------------------- 1 | .ui.radio.checkbox .box:before, 2 | .ui.radio.checkbox label:before { 3 | width: 26px; 4 | height: 26px; 5 | } 6 | 7 | .ui.radio.checkbox.checked input.hidden + label:after { 8 | top: 0px; 9 | left: -1px; 10 | width: 29px; 11 | height: 32px; 12 | } 13 | -------------------------------------------------------------------------------- /webapp/src/modules/account/types.ts: -------------------------------------------------------------------------------- 1 | export type Account = { 2 | id: string 3 | address: string 4 | nftIds: string[] 5 | } 6 | 7 | export type AccountMetrics = { 8 | address: string 9 | sales: number 10 | purchases: number 11 | spent: string 12 | earned: string 13 | royalties: string 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/OnSaleList.types.ts: -------------------------------------------------------------------------------- 1 | import { Props as OnSaleListElementProps } from './OnSaleListElement/OnSaleListElement.types' 2 | 3 | export type Props = { 4 | elements: OnSaleListElementProps[] 5 | isLoading: boolean 6 | } 7 | 8 | export type MapStateProps = Pick 9 | -------------------------------------------------------------------------------- /webapp/src/components/ManaField/ManaField.css: -------------------------------------------------------------------------------- 1 | .dcl.field .ManaField.ui.input input, 2 | .ui.form .dcl.field .ManaField.ui.input input { 3 | padding-left: 36px !important; 4 | } 5 | 6 | .ManaField .dcl.mana.ui.header { 7 | position: absolute; 8 | left: 8px; 9 | bottom: 12px; 10 | margin-bottom: 0px; 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/modules/collection/utils.ts: -------------------------------------------------------------------------------- 1 | export const getBuilderCollectionDetailUrl = (contractAddress: string) => 2 | `${process.env.REACT_APP_BUILDER_URL}?redirectTo=${encodeURIComponent( 3 | JSON.stringify({ 4 | type: 'COLLECTION_DETAIL_BY_CONTRACT_ADDRESS', 5 | data: { contractAddress } 6 | }) 7 | )}` 8 | -------------------------------------------------------------------------------- /webapp/src/themes/components/Button.css: -------------------------------------------------------------------------------- 1 | .ui.inverted.primary.button:focus { 2 | color: var(--primary); 3 | background-color: transparent; 4 | } 5 | 6 | .ui.loading.button:after { 7 | border-color: var(--primary) transparent transparent; 8 | } 9 | 10 | .ui.button + .ui.button { 11 | margin-left: 16px; 12 | } 13 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Column/Column.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type Props = { 4 | className?: string 5 | children: React.ReactNode 6 | align: 'left' | 'center' | 'right' 7 | grow: boolean 8 | shrink: boolean 9 | onClick?: (event: React.MouseEvent) => void 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/actions.ts: -------------------------------------------------------------------------------- 1 | import { action } from 'typesafe-actions' 2 | 3 | import { View } from './types' 4 | 5 | // Set View 6 | 7 | export const SET_VIEW = 'Set View' 8 | 9 | export const setView = (view: View) => action(SET_VIEW, { view }) 10 | 11 | export type SetViewAction = ReturnType 12 | -------------------------------------------------------------------------------- /webapp/src/components/AssetAction/AssetAction.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Asset } from '../../modules/asset/types' 3 | 4 | export type Props = { 5 | asset: Asset 6 | children: React.ReactNode 7 | onBack: (location?: string) => void 8 | } 9 | 10 | export type MapDispatchProps = Pick 11 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/EstateTags/EstateTags.css: -------------------------------------------------------------------------------- 1 | .EstateTags { 2 | display: flex; 3 | } 4 | 5 | .EstateTags .size { 6 | display: flex; 7 | align-items: center; 8 | border-radius: 4px; 9 | background-color: #37333d; 10 | font-size: 12px; 11 | line-height: 14px; 12 | color: white; 13 | padding: 4px 8px; 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Name/Name.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { getAssetName } from '../../../modules/asset/utils' 3 | import { Props } from './Name.types' 4 | 5 | const Name = (props: Props) => { 6 | const { asset } = props 7 | return {getAssetName(asset)} 8 | } 9 | 10 | export default React.memo(Name) 11 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/OnSaleListElement/OnSaleListElement.css: -------------------------------------------------------------------------------- 1 | .mobile-row { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .mobile-row .ui.header.dcl.mana { 9 | margin: 0px; 10 | } 11 | 12 | .mobile-row a { 13 | color: var(--text); 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/asset/reducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux' 2 | import { 3 | homepageReducer as homepage, 4 | HomepageUIState 5 | } from './homepage/reducer' 6 | 7 | export type AssetUIState = { 8 | homepage: HomepageUIState 9 | } 10 | 11 | export const assetReducer = combineReducers({ 12 | homepage 13 | }) 14 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/ToggleBox/ToggleBox.types.ts: -------------------------------------------------------------------------------- 1 | export type Item = { 2 | title: string 3 | description: string 4 | active?: boolean 5 | disabled?: boolean 6 | onClick: (item: Item, index: number) => unknown 7 | } 8 | 9 | export type Props = { 10 | header: string 11 | className?: string 12 | items: Item[] 13 | } 14 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/Menu.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Props } from './Menu.types' 4 | import './Menu.css' 5 | 6 | const Menu = (props: Props) => { 7 | const { className = '', children } = props 8 | 9 | return
    {children}
10 | } 11 | 12 | export default React.memo(Menu) 13 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionPage/CollectionPage.types.ts: -------------------------------------------------------------------------------- 1 | import { RouteChildrenProps } from 'react-router' 2 | 3 | export type Props = { 4 | onBack: () => void 5 | currentAddress?: string 6 | } & RouteChildrenProps 7 | 8 | export type MapStateProps = Pick 9 | export type MapDispatchProps = Pick 10 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/OnSaleListElement/OnSaleListElement.types.ts: -------------------------------------------------------------------------------- 1 | import { Item, Order } from '@dcl/schemas' 2 | import { NFT } from '../../../modules/nft/types' 3 | import { VendorName } from '../../../modules/vendor' 4 | 5 | export type Props = { 6 | item?: Item 7 | nft?: NFT 8 | order?: Order 9 | } 10 | -------------------------------------------------------------------------------- /webapp/src/modules/bid/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../reducer' 2 | 3 | export const getState = (state: RootState) => state.bid 4 | export const getData = (state: RootState) => getState(state).data 5 | export const getLoading = (state: RootState) => getState(state).loading 6 | export const getError = (state: RootState) => getState(state).error 7 | -------------------------------------------------------------------------------- /webapp/src/modules/asset/types.ts: -------------------------------------------------------------------------------- 1 | import { Item } from '@dcl/schemas' 2 | import { NFT } from '../nft/types' 3 | 4 | export enum AssetType { 5 | ITEM = 'item', 6 | NFT = 'nft' 7 | } 8 | 9 | export type Asset = T extends AssetType.NFT 10 | ? NFT 11 | : T extends AssetType.ITEM 12 | ? Item 13 | : NFT | Item 14 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/EstateDetail/ParcelCoordinates/ParcelCoordinates.types.ts: -------------------------------------------------------------------------------- 1 | import { Tile } from '../../../Atlas/Atlas.types' 2 | 3 | export type Props = { 4 | estateId: string 5 | parcelCoordinates: Tile[] 6 | } 7 | 8 | export type OwnProps = Pick 9 | 10 | export type MapStateProps = Pick 11 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/OnSaleList.module.css: -------------------------------------------------------------------------------- 1 | .filters { 2 | display: flex; 3 | } 4 | 5 | .search { 6 | flex: 1; 7 | } 8 | 9 | .pagination { 10 | display: flex; 11 | justify-content: center; 12 | } 13 | 14 | .empty { 15 | margin-top: 40px; 16 | font-size: 16px; 17 | text-align: center; 18 | color: var(--secondary-text); 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ENSTags/ENSTags.css: -------------------------------------------------------------------------------- 1 | .ENSTags { 2 | display: flex; 3 | } 4 | 5 | .ENSTags .badge { 6 | display: flex; 7 | align-items: center; 8 | border-radius: 4px; 9 | background-color: #37333d; 10 | font-size: 13px; 11 | text-transform: uppercase; 12 | line-height: 14px; 13 | color: white; 14 | padding: 4px 8px; 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/modules/proximity/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../reducer' 2 | 3 | export const getState = (state: RootState) => state.proximity 4 | export const getProximities = (state: RootState) => getState(state).data 5 | export const getLoading = (state: RootState) => getState(state).loading 6 | export const getError = (state: RootState) => getState(state).error 7 | -------------------------------------------------------------------------------- /webapp/src/images/back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/images/forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/.ci/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "market-static", 3 | "devDependencies": { 4 | "@types/node": "^14.11.2" 5 | }, 6 | "dependencies": { 7 | "@pulumi/aws": "^3.5.0", 8 | "@pulumi/awsx": "^0.22.0", 9 | "@pulumi/eks": "^0.20.0", 10 | "@pulumi/kubernetes": "^2.6.1", 11 | "@pulumi/pulumi": "^2.10.2", 12 | "dcl-ops-lib": "^4.15.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/BaseDetail/BaseDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { ReactNode } from 'react' 2 | import { Asset } from '../../../modules/asset/types' 3 | 4 | export type Props = { 5 | asset: Asset 6 | assetImage: ReactNode 7 | isOnSale: boolean 8 | badges: ReactNode 9 | left: ReactNode 10 | box: ReactNode 11 | below?: ReactNode 12 | className?: string 13 | } 14 | -------------------------------------------------------------------------------- /webapp/src/components/ScrollToTop/ScrollToTop.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react' 2 | import { useLocation } from 'react-router-dom' 3 | 4 | const ScrollToTop = () => { 5 | const { pathname } = useLocation() 6 | 7 | useEffect(() => { 8 | window.scrollTo(0, 0) 9 | }, [pathname]) 10 | 11 | return null 12 | } 13 | 14 | export default React.memo(ScrollToTop) 15 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ItemDetail/ItemDetail.types.ts: -------------------------------------------------------------------------------- 1 | import { Item } from '@dcl/schemas' 2 | import { Wallet } from 'decentraland-dapps/dist/modules/wallet/types' 3 | 4 | export type Props = { 5 | wallet: Wallet | null 6 | item: Item 7 | } 8 | 9 | export type MapStateProps = Pick 10 | export type MapDispatchProps = {} 11 | export type MapDispatch = {} 12 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Row/Row.css: -------------------------------------------------------------------------------- 1 | .Row { 2 | display: flex; 3 | position: relative; 4 | flex-flow: row nowrap; 5 | width: 100%; 6 | } 7 | 8 | .Row > .Column.grow { 9 | flex: 1 1 auto; 10 | } 11 | 12 | .Row > .Column.shrink { 13 | flex: 0 0 auto; 14 | } 15 | 16 | @media (max-width: 768px) { 17 | .Row > .Column.right { 18 | overflow: hidden; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Owner/Owner.css: -------------------------------------------------------------------------------- 1 | .Owner .Profile { 2 | display: flex !important; 3 | align-items: center; 4 | } 5 | 6 | .Owner .Profile .name { 7 | margin-left: 10px; 8 | font-size: 21px; 9 | font-style: normal; 10 | font-weight: 600; 11 | line-height: 30px; 12 | letter-spacing: 0.3149999976158142px; 13 | text-align: left; 14 | color: var(--text); 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Title/Title.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { getAssetName } from '../../../modules/asset/utils' 3 | import { Props } from './Title.types' 4 | import styles from './Title.module.css' 5 | 6 | const Title = ({ asset }: Props) => { 7 | return
{getAssetName(asset)}
8 | } 9 | 10 | export default React.memo(Title) 11 | -------------------------------------------------------------------------------- /webapp/src/themes/index.ts: -------------------------------------------------------------------------------- 1 | // Base 2 | import 'decentraland-ui/lib/styles.css' 3 | 4 | // Theme 5 | import 'decentraland-ui/lib/dark-theme.css' 6 | 7 | // Overrides 8 | import './components/Button.css' 9 | import './components/Card.css' 10 | import './components/Navigation.css' 11 | import './components/Field.css' 12 | import './components/Radio.css' 13 | import './components/Popup.css' 14 | -------------------------------------------------------------------------------- /webapp/src/components/Chip/Chip.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { IconProps } from 'decentraland-ui' 3 | 4 | export type Props = { 5 | className: string 6 | text: React.ReactNode 7 | icon: IconProps['name'] | '' 8 | type: 'square' | 'rectangle' | 'circle' 9 | isActive: boolean 10 | isDisabled: boolean 11 | onClick?: (event: React.MouseEvent) => any 12 | } 13 | -------------------------------------------------------------------------------- /webapp/src/components/CollectionImage/CollectionImage.css: -------------------------------------------------------------------------------- 1 | .CollectionImage { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | .CollectionImage .item-row { 7 | width: inherit; 8 | height: inherit; 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | } 13 | 14 | .CollectionImage .item-row.full-width-image > .AssetImage .image { 15 | width: 100%; 16 | } 17 | -------------------------------------------------------------------------------- /webapp/src/images/fullscreen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/RarityBadge/RarityBadge.types.ts: -------------------------------------------------------------------------------- 1 | import { Rarity } from '@dcl/schemas' 2 | import { AssetType } from '../../../modules/asset/types' 3 | 4 | export type Props = { 5 | rarity: Rarity 6 | assetType: AssetType 7 | onClick: () => void 8 | } 9 | 10 | export type MapDispatchProps = Pick 11 | export type OwnProps = Pick 12 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ENSTags/ENSTags.tsx: -------------------------------------------------------------------------------- 1 | import { t } from 'decentraland-dapps/dist/modules/translation/utils' 2 | import { Props } from './ENSTags.types' 3 | import './ENSTags.css' 4 | 5 | const ENSTags = (_: Props) => { 6 | return ( 7 |
8 |
{t('global.ens')}
9 |
10 | ) 11 | } 12 | 13 | export default ENSTags 14 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ProximityHighlights/ProximityHighlights.css: -------------------------------------------------------------------------------- 1 | .ProximityHighlights .Highlight .plaza { 2 | background-image: url(../../../images/plaza.svg); 3 | } 4 | 5 | .ProximityHighlights .Highlight .road { 6 | background-image: url(../../../images/road.svg); 7 | } 8 | 9 | .ProximityHighlights .Highlight .district { 10 | background-image: url(../../../images/district.svg); 11 | } 12 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/nft/reducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux' 2 | import { bidReducer as bid, BidUIState } from './bid/reducer' 3 | import { partnerReducer as partner, PartnerUIState } from './partner/reducer' 4 | 5 | export type NFTUIState = { 6 | bid: BidUIState 7 | partner: PartnerUIState 8 | } 9 | 10 | export const nftReducer = combineReducers({ 11 | bid, 12 | partner 13 | }) 14 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: decentraland/ci-node:latest 2 | 3 | build: 4 | only: 5 | - master 6 | - staging 7 | - release 8 | script: 9 | - cd webapp 10 | - ./setupEnv.sh 11 | - npm ci && npm run build 12 | - dcl-lock-sync 13 | - cd .ci && npm ci && dcl-up website-market 14 | - dcl-sync-release && cd .. 15 | - dcl-upload build 16 | - cd .ci && dcl-cache-invalidation 17 | -------------------------------------------------------------------------------- /webapp/src/components/Navigation/Navigation.types.ts: -------------------------------------------------------------------------------- 1 | export enum NavigationTab { 2 | LANDS = 'lands', 3 | BROWSE = 'browse', 4 | COLLECTIBLES = 'collectibles', 5 | MY_STORE = 'my_store', 6 | ACTIVITY = 'activity' 7 | } 8 | 9 | export type Props = { 10 | activeTab?: NavigationTab 11 | isFullscreen?: boolean 12 | } 13 | 14 | export type MapStateProps = {} 15 | export type MapDispatchProps = {} 16 | -------------------------------------------------------------------------------- /webapp/src/components/AccountPage/AccountPage.css: -------------------------------------------------------------------------------- 1 | .AccountPage .PageHeader { 2 | display: flex; 3 | align-items: center; 4 | background-color: var(--card); 5 | } 6 | 7 | .AccountPage .PageHeader > div { 8 | margin: auto; 9 | text-align: center; 10 | } 11 | 12 | .AccountPage ul.Menu { 13 | margin-top: 0; 14 | } 15 | 16 | .AccountPage .blockie-address { 17 | margin-top: 16px; 18 | font-size: 17px; 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/images/road.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/CategoryBadge/CategoryBadge.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '@dcl/schemas' 2 | import { AssetType } from '../../../modules/asset/types' 3 | 4 | export type Props = { 5 | wearable: Required['wearable'] 6 | assetType: AssetType 7 | onClick: () => void 8 | } 9 | 10 | export type MapDispatchProps = Pick 11 | export type OwnProps = Pick 12 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/GenderBadge/GenderBadge.types.ts: -------------------------------------------------------------------------------- 1 | import { NFT } from '@dcl/schemas' 2 | import { AssetType } from '../../../modules/asset/types' 3 | 4 | export type Props = { 5 | wearable: Required['wearable'] 6 | assetType: AssetType 7 | onClick: () => void 8 | } 9 | 10 | export type MapDispatchProps = Pick 11 | export type OwnProps = Pick 12 | -------------------------------------------------------------------------------- /webapp/src/components/PageHeader/PageHeader.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Props } from './PageHeader.types' 4 | import './PageHeader.css' 5 | import classNames from 'classnames' 6 | 7 | const PageHeader = ({ style, className, children }: Props) => ( 8 |
9 | {children} 10 |
11 | ) 12 | 13 | export default React.memo(PageHeader) 14 | -------------------------------------------------------------------------------- /indexer/src/modules/utils/index.ts: -------------------------------------------------------------------------------- 1 | export function toLowerCase(str: string): string { 2 | let result = '' 3 | 4 | for (let i = 0; i < str.length; i++) { 5 | let character = str[i] 6 | let charCode = character.charCodeAt(0) 7 | if (charCode > 64 && charCode < 91) { 8 | result += String.fromCharCode(charCode + 32) 9 | } else { 10 | result += character 11 | } 12 | } 13 | 14 | return result 15 | } 16 | -------------------------------------------------------------------------------- /webapp/.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 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | .env -------------------------------------------------------------------------------- /webapp/src/components/AccountPage/AccountBanner/AccountBanner.types.tsx: -------------------------------------------------------------------------------- 1 | import { Store } from '../../../modules/store/types' 2 | 3 | export type Props = { 4 | address: string 5 | store?: Store 6 | isLoading: boolean 7 | onBack: () => void 8 | onFetchStore: (address: string) => void 9 | } 10 | 11 | export type MapStateProps = Pick 12 | export type MapDispatchProps = Pick 13 | -------------------------------------------------------------------------------- /webapp/src/components/BidPage/BidModal/BidModal.css: -------------------------------------------------------------------------------- 1 | .BidPage .ui.header { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .BidPage .subtitle { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .BidPage .form-fields { 10 | max-width: 420px; 11 | margin-bottom: 20px; 12 | } 13 | 14 | .BidPage .fields .dcl.field { 15 | margin-bottom: 8px; 16 | } 17 | 18 | @media (max-width: 768px) { 19 | .BidPage .dcl.field { 20 | min-width: auto; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /webapp/src/images/pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/Box/Box.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | border: 2px solid var(--secondary); 3 | border-radius: 12px; 4 | display: flex; 5 | flex-direction: column; 6 | } 7 | 8 | .header { 9 | margin-left: 20px; 10 | margin-top: 13px; 11 | margin-bottom: 13px; 12 | text-transform: uppercase; 13 | color: #736e7d; 14 | font-weight: 600; 15 | font-size: 13px; 16 | } 17 | 18 | .children { 19 | margin-bottom: 8px; 20 | } 21 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/AssetCard.types.ts: -------------------------------------------------------------------------------- 1 | import { Order } from '@dcl/schemas' 2 | import { Asset } from '../../modules/asset/types' 3 | 4 | export type Props = { 5 | asset: Asset 6 | price: string | null 7 | order?: Order 8 | showListedTag?: boolean 9 | } 10 | 11 | export type MapStateProps = Pick 12 | export type MapDispatchProps = {} 13 | export type OwnProps = Pick 14 | -------------------------------------------------------------------------------- /webapp/src/images/pin-mini.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/Transaction/TransactionDetail/TransactionDetail.types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Transaction } from 'decentraland-dapps/dist/modules/transaction/types' 3 | import { Asset } from '../../../../modules/asset/types' 4 | 5 | export type Props = { 6 | asset?: Asset | null 7 | text: React.ReactNode 8 | tx: Transaction 9 | } 10 | 11 | export type MapStateProps = {} 12 | export type MapDispatchProps = {} 13 | -------------------------------------------------------------------------------- /webapp/src/components/Atlas/Popup/Popup.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | import { Tile } from '../Atlas.types' 3 | 4 | export type Props = { 5 | x: number 6 | y: number 7 | visible: boolean 8 | tile: Tile 9 | position: 'left' | 'right' 10 | } 11 | 12 | export type MapStateProps = {} 13 | export type MapDispatchProps = {} 14 | export type MapDispatch = Dispatch 15 | export type OwnProps = Pick 16 | -------------------------------------------------------------------------------- /webapp/src/components/BuyPage/Price/Price.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { formatMANA } from '../../../lib/mana' 3 | import { Mana } from '../../Mana' 4 | import { Props } from './Price.types' 5 | 6 | const Price = (props: Props) => { 7 | const { network, price } = props 8 | return ( 9 | 10 | {formatMANA(price)} 11 | 12 | ) 13 | } 14 | 15 | export default React.memo(Price) 16 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/InputContainer/InputContainer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Props } from './InputContainer.types' 3 | import './InputContainer.css' 4 | 5 | const InputContainer = ({ title, children }: Props) => { 6 | return ( 7 |
8 |
{title}
9 | {children} 10 |
11 | ) 12 | } 13 | 14 | export default React.memo(InputContainer) 15 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ProximityTags/ProximityTags.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | import { NFT } from '../../../modules/nft/types' 3 | import { Proximity } from '../../../modules/proximity/types' 4 | 5 | export type Props = { 6 | nft: NFT 7 | proximities: Record 8 | } 9 | 10 | export type MapStateProps = Pick 11 | export type MapDispatchProps = {} 12 | export type MapDispatch = Dispatch 13 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/JumpIn/JumpIn.module.css: -------------------------------------------------------------------------------- 1 | .JumpIn a { 2 | color: var(--text); 3 | display: flex; 4 | align-items: center; 5 | } 6 | 7 | .JumpIn a:hover { 8 | color: var(--text); 9 | } 10 | 11 | .jumpInIcon { 12 | background: url(../../../images/jump_in.svg); 13 | background-size: 16px 16px; 14 | width: 16px; 15 | height: 16px; 16 | background-repeat: no-repeat; 17 | display: inline-block; 18 | margin-left: 6px; 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/OtherAccountSidebar/OtherAccountSidebar.types.tsx: -------------------------------------------------------------------------------- 1 | import { AssetType } from '../../../modules/asset/types' 2 | import { BrowseOptions } from '../../../modules/routing/types' 3 | 4 | export type Props = { 5 | section: string 6 | assetType: AssetType 7 | onBrowse: (options: BrowseOptions) => void 8 | } 9 | 10 | export type MapStateProps = Pick 11 | export type MapDispatchProps = Pick 12 | -------------------------------------------------------------------------------- /webapp/src/components/Footer/Footer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FooterProps } from 'decentraland-ui' 3 | import { Footer as BaseFooter } from 'decentraland-dapps/dist/containers' 4 | import * as tranlsations from '../../modules/translation/locales' 5 | 6 | const locales = Object.keys(tranlsations) 7 | 8 | const Footer = (props: FooterProps) => ( 9 | 10 | ) 11 | 12 | export default React.memo(Footer) 13 | -------------------------------------------------------------------------------- /webapp/src/components/Layout/Row/Row.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Props } from './Row.types' 4 | import './Row.css' 5 | 6 | const Row = (props: Props) => { 7 | const { className, children, onClick } = props 8 | 9 | return ( 10 |
11 | {children} 12 |
13 | ) 14 | } 15 | 16 | Row.defaultProps = { 17 | className: '' 18 | } 19 | 20 | export default React.memo(Row) 21 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/VendorMenu/VendorMenu.types.ts: -------------------------------------------------------------------------------- 1 | import { VendorName } from '../../../modules/vendor/types' 2 | 3 | export type Props = { 4 | count?: number 5 | currentVendor: VendorName 6 | address?: string 7 | vendor: VendorName 8 | section: string 9 | onClick: (value: string) => void 10 | } 11 | 12 | export type MapStateProps = Pick 13 | export type MapDispatchProps = {} 14 | export type MapDispatch = {} 15 | -------------------------------------------------------------------------------- /webapp/.ci/index.ts: -------------------------------------------------------------------------------- 1 | import { env, envTLD } from 'dcl-ops-lib/domain' 2 | import { buildStatic } from 'dcl-ops-lib/buildStatic' 3 | 4 | async function main() { 5 | const market = buildStatic({ 6 | domain: `market.decentraland.${env === 'prd' ? 'org' : envTLD}`, 7 | defaultPath: 'index.html', 8 | }) 9 | 10 | return { 11 | cloudfrontDistribution: market.cloudfrontDistribution, 12 | bucketName: market.contentBucket, 13 | } 14 | } 15 | export = main 16 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ProximityHighlights/ProximityHighlights.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | import { NFT } from '../../../modules/nft/types' 3 | import { Proximity } from '../../../modules/proximity/types' 4 | 5 | export type Props = { 6 | nft: NFT 7 | proximities: Record 8 | } 9 | 10 | export type MapStateProps = Pick 11 | export type MapDispatchProps = {} 12 | export type MapDispatch = Dispatch 13 | -------------------------------------------------------------------------------- /webapp/src/components/OnSaleList/AssetCell/AssetCell.module.css: -------------------------------------------------------------------------------- 1 | .firstCell { 2 | display: flex; 3 | align-items: center; 4 | } 5 | 6 | .imageContainer { 7 | display: flex; 8 | justify-content: center; 9 | align-items: center; 10 | width: 48px; 11 | height: 48px; 12 | margin-right: 1rem; 13 | border-radius: 4px; 14 | overflow: hidden; 15 | } 16 | 17 | .title { 18 | font-weight: 600; 19 | } 20 | 21 | .subtitle { 22 | font-weight: 400; 23 | } 24 | -------------------------------------------------------------------------------- /webapp/src/components/StoreSettings/TextInput/TextInput.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Props } from './TextInput.types' 3 | import './TextInput.css' 4 | 5 | const TextInput = ({ type, value, onChange }: Props) => { 6 | const Input = type 7 | 8 | return ( 9 | onChange(e.target.value)} 13 | /> 14 | ) 15 | } 16 | 17 | export default React.memo(TextInput) 18 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/known_origin/NFTFilters/NFTFilters.types.ts: -------------------------------------------------------------------------------- 1 | import { SortBy } from '../../../../modules/routing/types' 2 | import { browse } from '../../../../modules/routing/actions' 3 | 4 | export type Props = { 5 | section: string 6 | sortBy?: SortBy 7 | onlyOnSale?: boolean 8 | onBrowse: typeof browse 9 | } 10 | 11 | export type MapStateProps = Pick 12 | export type OwnProps = Pick 13 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/ParcelTags/ParcelTags.module.css: -------------------------------------------------------------------------------- 1 | .ParcelTags { 2 | display: flex; 3 | } 4 | 5 | .coordinates { 6 | font-size: 12px !important; 7 | padding: 4px 8px !important; 8 | border-radius: 4px !important; 9 | color: white; 10 | line-height: 14px !important; 11 | height: auto !important; 12 | } 13 | 14 | .coordinates i { 15 | width: 14px; 16 | height: 12px; 17 | background-size: 18px; 18 | background-position: -4px -3px; 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Highlights/Highlights.css: -------------------------------------------------------------------------------- 1 | .Highlights > .ui.header, 2 | .Highlights > .ui.sub.header { 3 | margin-bottom: 13px; 4 | } 5 | 6 | @media (min-width: 768px) { 7 | .Highlights .Highlight + .Highlight { 8 | margin-left: 64px; 9 | } 10 | } 11 | 12 | @media (max-width: 768px) { 13 | .Highlights > .Row { 14 | flex-direction: column; 15 | } 16 | 17 | .Highlights .Highlight + .Highlight { 18 | margin-top: 24px; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /webapp/src/components/Collapsible/Collapsible.module.css: -------------------------------------------------------------------------------- 1 | .Collapsible { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | 7 | .showMore { 8 | margin-top: 15px; 9 | justify-content: center; 10 | } 11 | 12 | .showMore span { 13 | font-size: 15px; 14 | color: var(--primary); 15 | cursor: pointer; 16 | } 17 | 18 | .children { 19 | width: 100%; 20 | } 21 | 22 | .collapsibleWrapper { 23 | overflow: hidden; 24 | width: 100%; 25 | } 26 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/decentraland/NFTSections/NFTSections.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Menu } from '../../../Menu' 3 | import { Props } from './NFTSections.types' 4 | import NFTSectionsMenuItems from './NFTSectionsMenuItems' 5 | 6 | const NFTSections = (props: Props) => { 7 | return ( 8 | 9 | 10 | 11 | ) 12 | } 13 | 14 | export default React.memo(NFTSections) 15 | -------------------------------------------------------------------------------- /webapp/src/modules/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../reducer' 2 | 3 | export const getState = (state: RootState) => state.store 4 | export const getData = (state: RootState) => getState(state).data 5 | export const getStoresByOwner = getData 6 | export const getLoading = (state: RootState) => getState(state).loading 7 | export const getLocalStore = (state: RootState) => getState(state).localStore 8 | export const getError = (state: RootState) => getState(state).error 9 | -------------------------------------------------------------------------------- /webapp/src/components/ActivityPage/ActivityPage.css: -------------------------------------------------------------------------------- 1 | .ActivityPage .center { 2 | position: absolute; 3 | top: 0px; 4 | left: 0px; 5 | right: 0px; 6 | bottom: 0px; 7 | display: flex; 8 | align-items: center; 9 | justify-content: center; 10 | } 11 | 12 | .ActivityPage .ui.basic.button { 13 | padding: 0; 14 | } 15 | 16 | .ActivityPage .center p { 17 | color: var(--secondary-text); 18 | } 19 | 20 | .ActivityPage .transactions { 21 | margin-top: 20px; 22 | } 23 | -------------------------------------------------------------------------------- /webapp/src/components/UserMenu/UserMenu.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { UserMenu as BaseUserMenu } from 'decentraland-dapps/dist/containers' 3 | import { IntroPopup } from '../IntroPopup' 4 | import { Props } from './UserMenu.types' 5 | 6 | export default class UserMenu extends React.PureComponent { 7 | render() { 8 | return ( 9 | <> 10 | 11 | 12 | 13 | ) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /webapp/src/components/AccountSidebar/AccountSidebar.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | import { browse, BrowseAction } from '../../modules/routing/actions' 3 | 4 | export type Props = { 5 | section: string 6 | address: string 7 | isCurrentAccount?: boolean 8 | onBrowse: typeof browse 9 | } 10 | 11 | export type MapStateProps = Pick 12 | export type MapDispatchProps = Pick 13 | export type MapDispatch = Dispatch 14 | -------------------------------------------------------------------------------- /webapp/src/images/pin-land.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/AssetPage.container.tsx: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { Dispatch } from 'redux' 3 | import { goBack } from '../../modules/routing/actions' 4 | import AssetPage from './AssetPage' 5 | import { MapDispatchProps } from './AssetPage.types' 6 | 7 | const mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({ 8 | onBack: (location?: string) => dispatch(goBack(location)) 9 | }) 10 | 11 | export default connect(null, mapDispatch)(AssetPage) 12 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Collection/Collection.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | align-items: center; 4 | } 5 | 6 | .name { 7 | margin-left: 16px; 8 | font-size: 21px; 9 | font-style: normal; 10 | font-weight: 600; 11 | line-height: 30px; 12 | letter-spacing: 0.3149999976158142px; 13 | text-align: left; 14 | color: var(--text); 15 | } 16 | 17 | .image { 18 | width: 48px; 19 | height: 48px; 20 | border-radius: 5px; 21 | overflow: hidden; 22 | } 23 | -------------------------------------------------------------------------------- /webapp/src/components/AssetAction/AssetAction.container.ts: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { Dispatch } from 'redux' 3 | import { goBack } from '../../modules/routing/actions' 4 | import AssetPage from './AssetAction' 5 | import { MapDispatchProps } from './AssetAction.types' 6 | 7 | const mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({ 8 | onBack: (location?: string) => dispatch(goBack(location)) 9 | }) 10 | 11 | export default connect(null, mapDispatch)(AssetPage) 12 | -------------------------------------------------------------------------------- /webapp/.ci/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "outDir": "bin", 5 | "target": "es2016", 6 | "module": "commonjs", 7 | "moduleResolution": "node", 8 | "esModuleInterop": true, 9 | "sourceMap": true, 10 | "experimentalDecorators": true, 11 | "pretty": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "noImplicitReturns": true, 14 | "forceConsistentCasingInFileNames": true 15 | }, 16 | "include": ["*.ts", "**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Expiration/Expiration.container.ts: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { MapStateProps } from './Expiration.types' 3 | import Expiration from './Expiration' 4 | import { RootState } from '../../../modules/reducer' 5 | import { getCurrentOrder } from '../../../modules/order/selectors' 6 | 7 | const mapState = (state: RootState): MapStateProps => ({ 8 | order: getCurrentOrder(state) || undefined 9 | }) 10 | 11 | export default connect(mapState)(Expiration) 12 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/NFTFilters.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | 3 | import { browse, BrowseAction } from '../../../modules/routing/actions' 4 | 5 | export type Props = { 6 | vendor?: string 7 | onBrowse: typeof browse 8 | isMap: boolean 9 | } 10 | 11 | export type MapStateProps = Pick 12 | export type MapDispatchProps = Pick 13 | export type MapDispatch = Dispatch 14 | export type OwnProps = Pick 15 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/reducer.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux' 2 | import { assetReducer as asset, AssetUIState } from './asset/reducer' 3 | import { nftReducer as nft, NFTUIState } from './nft/reducer' 4 | import { browseReducer as browse, BrowseUIState } from './browse/reducer' 5 | 6 | export type UIState = { 7 | asset: AssetUIState 8 | nft: NFTUIState 9 | browse: BrowseUIState 10 | } 11 | 12 | export const uiReducer = combineReducers({ 13 | asset, 14 | nft, 15 | browse 16 | }) 17 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/IconBadge/IconBadge.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import classNames from 'classnames' 3 | import { Props } from './IconBadge.types' 4 | import './IconBadge.css' 5 | 6 | const IconBadge = ({ icon, text, onClick }: Props) => { 7 | return ( 8 |
9 | 10 | {text} 11 |
12 | ) 13 | } 14 | 15 | export default React.memo(IconBadge) 16 | -------------------------------------------------------------------------------- /webapp/src/components/HomePage/HomePage.css: -------------------------------------------------------------------------------- 1 | .HomePageHero.dcl.hero { 2 | height: var(--page-header-height); 3 | } 4 | 5 | .HomePageHero .hero-image { 6 | position: absolute; 7 | top: 0px; 8 | left: 0px; 9 | bottom: 0px; 10 | right: 0px; 11 | background-image: url(../../images/hero.png); 12 | background-size: cover; 13 | background-repeat: no-repeat; 14 | } 15 | 16 | .HomePageHero.dcl.hero .ui.header.hero-subtitle { 17 | margin-bottom: 24px; 18 | color: var(--secondary-text); 19 | } 20 | -------------------------------------------------------------------------------- /webapp/src/modules/nft/wearable/utils.ts: -------------------------------------------------------------------------------- 1 | import { BodyShape } from '@dcl/schemas' 2 | import { NFT } from '../types' 3 | 4 | export function isGender(wearable: NFT['data']['wearable'], gender: BodyShape) { 5 | if (!wearable) return false 6 | if (wearable.bodyShapes.length !== 1) return false 7 | return wearable.bodyShapes[0] === gender 8 | } 9 | 10 | export function isUnisex(wearable: NFT['data']['wearable']) { 11 | if (!wearable) return false 12 | return wearable.bodyShapes.length === 2 13 | } 14 | -------------------------------------------------------------------------------- /webapp/src/components/SellPage/SellPage.css: -------------------------------------------------------------------------------- 1 | .SellPage .ui.header { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .SellPage .subtitle { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .SellPage .form-fields { 10 | max-width: 420px; 11 | margin-bottom: 20px; 12 | } 13 | 14 | .ConfirmPriceModal .dcl.field .ui.sub.header { 15 | margin-top: 24px; 16 | } 17 | 18 | @media (max-width: 768px) { 19 | .SellPage .dcl.field, 20 | .ConfirmPriceModal .dcl.field { 21 | width: 100%; 22 | min-width: auto; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/modules/store/types.ts: -------------------------------------------------------------------------------- 1 | import { Store as CommonsStore } from '@dcl/schemas' 2 | 3 | export type Store = { 4 | owner: string 5 | cover: string 6 | coverName: string 7 | description: string 8 | website: string 9 | facebook: string 10 | twitter: string 11 | discord: string 12 | } 13 | 14 | export enum LinkType { 15 | WEBSITE = 'website', 16 | FACEBOOK = 'facebook', 17 | TWITTER = 'twitter', 18 | DISCORD = 'discord' 19 | } 20 | 21 | export type StoreEntityMetadata = CommonsStore 22 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Network/Network.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Stats } from 'decentraland-ui' 3 | import { t } from 'decentraland-dapps/dist/modules/translation/utils' 4 | 5 | import { Props } from './Network.types' 6 | 7 | const Network = (props: Props) => { 8 | const { asset } = props 9 | 10 | return ( 11 | 12 | {t(`networks.${asset.network.toLowerCase()}`)} 13 | 14 | ) 15 | } 16 | 17 | export default React.memo(Network) 18 | -------------------------------------------------------------------------------- /webapp/src/components/Coordinate/Coordinate.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Badge } from 'decentraland-ui' 3 | import { Props } from './Coordinate.types' 4 | import styles from './Coordinate.module.css' 5 | 6 | const Coordinate = (props: Props) => { 7 | const { x, y, className } = props 8 | 9 | return ( 10 | 11 | 12 | {`${x},${y}`} 13 | 14 | ) 15 | } 16 | 17 | export default React.memo(Coordinate) 18 | -------------------------------------------------------------------------------- /webapp/src/components/Navbar/Navbar.css: -------------------------------------------------------------------------------- 1 | .dcl.navbar .ui.menu .item .bell { 2 | color: var(--text); 3 | } 4 | 5 | .dcl.navbar .ui.menu .item.active .bell { 6 | color: var(--primary); 7 | } 8 | 9 | .dcl.navbar .ui.menu .item .bell.pending:after { 10 | content: ''; 11 | width: 5px; 12 | height: 5px; 13 | background-color: var(--primary); 14 | position: absolute; 15 | border-radius: 100%; 16 | top: -5px; 17 | right: -5px; 18 | } 19 | 20 | .dcl.account-wrapper .dcl.mana { 21 | flex: none; 22 | } 23 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/index.ts: -------------------------------------------------------------------------------- 1 | import { NFTService } from './NFTService' 2 | import { ContractService } from './ContractService' 3 | import { OrderService } from './OrderService' 4 | 5 | export const VendorName = 'known_origin' 6 | 7 | export * from './nft' 8 | export * from './routing' 9 | 10 | export * from './NFTService' 11 | export * from './ContractService' 12 | export * from './OrderService' 13 | export const services = { 14 | NFTService, 15 | ContractService, 16 | OrderService 17 | } 18 | -------------------------------------------------------------------------------- /webapp/src/components/Menu/MenuItem/MenuItem.css: -------------------------------------------------------------------------------- 1 | .MenuItem { 2 | display: flex; 3 | } 4 | 5 | .MenuItem .content { 6 | display: inline-block; 7 | flex: 1 1 auto; 8 | align-self: center; 9 | line-height: 24px; 10 | } 11 | 12 | .MenuItem .ui.image { 13 | margin-right: 15px; 14 | vertical-align: middle; 15 | } 16 | 17 | .MenuItem .content .subtitle { 18 | font-size: 16px; 19 | font-weight: 400; 20 | color: var(--secondary-text); 21 | } 22 | 23 | .NFTSidebar .MenuItem { 24 | border-radius: 6px; 25 | } 26 | -------------------------------------------------------------------------------- /webapp/src/components/ListedBadge/ListedBadge.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames' 2 | import { Badge, Color, Icon } from 'decentraland-ui' 3 | import styles from './ListedBadge.module.css' 4 | 5 | type Props = { 6 | className?: string 7 | } 8 | 9 | const ListedBadge = ({ className }: Props) => ( 10 | 14 | 15 | 16 | ) 17 | 18 | export default ListedBadge 19 | -------------------------------------------------------------------------------- /webapp/src/components/AssetCard/EstateTags/EstateTags.tsx: -------------------------------------------------------------------------------- 1 | import { ProximityTags } from '../ProximityTags' 2 | import { Props } from './EstateTags.types' 3 | import './EstateTags.css' 4 | 5 | const EstateTags = (props: Props) => { 6 | const { nft } = props 7 | const estate = nft.data.estate! 8 | return ( 9 |
10 |
{estate.size.toLocaleString()} LAND
11 | 12 |
13 | ) 14 | } 15 | 16 | export default EstateTags 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Marketplace 2 | 3 | Decentraland's Marketplace 4 | 5 | ## Frontend 6 | 7 | It can be found under [/webapp](https://github.com/decentraland/marketplace/tree/master/webapp). 8 | 9 | ## Backend 10 | 11 | It can be found under [/indexer](https://github.com/decentraland/marketplace/tree/master/indexer). 12 | 13 | ## Copyright & License 14 | 15 | This repository is protected with a standard Apache 2 license. See the terms and conditions in the [LICENSE](https://github.com/decentraland/marketplace/blob/master/LICENSE) file. 16 | -------------------------------------------------------------------------------- /indexer/src/data/wearables/binance_us_collection.ts: -------------------------------------------------------------------------------- 1 | import { Wearable } from './Wearable' 2 | 3 | export let binance_us_collection: Wearable[] = [ 4 | new Wearable( 5 | 'binance_us_hat', 6 | 'Binance US Hat', 7 | 'Binance US Hat', 8 | 'hat', 9 | 'uncommon', 10 | ['BaseMale', 'BaseFemale'] 11 | ), 12 | new Wearable( 13 | 'binance_us_upper_body', 14 | 'Binance US Hoodie', 15 | 'Binance US Hoodie', 16 | 'upper_body', 17 | 'uncommon', 18 | ['BaseMale', 'BaseFemale'] 19 | ) 20 | ] 21 | 22 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/ItemDetail/ItemDetail.container.ts: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | 3 | import { RootState } from '../../../modules/reducer' 4 | import { getWallet } from '../../../modules/wallet/selectors' 5 | import { MapStateProps } from './ItemDetail.types' 6 | import ItemDetail from './ItemDetail' 7 | 8 | const mapState = (state: RootState): MapStateProps => ({ 9 | wallet: getWallet(state) 10 | }) 11 | 12 | const mapDispatch = () => ({}) 13 | 14 | export default connect(mapState, mapDispatch)(ItemDetail) 15 | -------------------------------------------------------------------------------- /webapp/src/components/AssetProviderPage/AssetProviderPage.types.ts: -------------------------------------------------------------------------------- 1 | import { Order } from '@dcl/schemas' 2 | import { Asset, AssetType } from '../../modules/asset/types' 3 | 4 | export type Props = { 5 | type: T 6 | isConnecting: boolean 7 | children: (asset: Asset, order: Order | null) => React.ReactNode | null 8 | } 9 | 10 | export type MapStateProps = Pick 11 | export type OwnProps = Pick< 12 | Props, 13 | 'type' | 'children' 14 | > 15 | -------------------------------------------------------------------------------- /webapp/src/modules/ui/utils.ts: -------------------------------------------------------------------------------- 1 | import { Section, Sections } from '../vendor/routing/types' 2 | import { View } from './types' 3 | 4 | const accountViews = new Set([View.ACCOUNT, View.CURRENT_ACCOUNT]) 5 | const landSections = new Set
([ 6 | Sections.decentraland.LAND, 7 | Sections.decentraland.PARCELS, 8 | Sections.decentraland.ESTATES 9 | ]) 10 | 11 | export const isAccountView = (view: View) => accountViews.has(view) 12 | export const isLandSection = (section?: Section) => 13 | !!section && landSections.has(section) 14 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/super_rare/index.ts: -------------------------------------------------------------------------------- 1 | import { NFTService } from './NFTService' 2 | import { ContractService } from './ContractService' 3 | import { OrderService } from './OrderService' 4 | 5 | export const VendorName = 'super_rare' 6 | 7 | export * from './types' 8 | export * from './nft' 9 | export * from './routing' 10 | 11 | export * from './NFTService' 12 | export * from './ContractService' 13 | export * from './OrderService' 14 | export const services = { 15 | NFTService, 16 | ContractService, 17 | OrderService 18 | } 19 | -------------------------------------------------------------------------------- /indexer/src/modules/estate/index.ts: -------------------------------------------------------------------------------- 1 | import { NFT, Estate } from '../../entities/schema' 2 | 3 | export function buildEstateFromNFT(nft: NFT): Estate { 4 | let estate = new Estate(nft.id) 5 | 6 | estate.tokenId = nft.tokenId 7 | estate.owner = nft.owner 8 | estate.parcels = [] 9 | estate.size = 0 10 | 11 | return estate 12 | } 13 | 14 | export function getEstateImage(estate: Estate): string { 15 | return ( 16 | 'https://api.decentraland.org/v1/estates/' + 17 | estate.tokenId.toString() + 18 | '/map.png' 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Actions/Actions.types.ts: -------------------------------------------------------------------------------- 1 | import { Bid, Order } from '@dcl/schemas' 2 | import { Wallet } from 'decentraland-dapps/dist/modules//wallet/types' 3 | import { NFT } from '../../../modules/nft/types' 4 | 5 | export type Props = { 6 | wallet: Wallet | null 7 | nft: NFT 8 | order: Order | null 9 | bids: Bid[] 10 | } 11 | 12 | export type MapStateProps = Pick 13 | export type MapDispatchProps = {} 14 | export type MapDispatch = {} 15 | export type OwnProps = Pick 16 | -------------------------------------------------------------------------------- /webapp/src/modules/item/utils.ts: -------------------------------------------------------------------------------- 1 | import { Item } from '@dcl/schemas' 2 | 3 | export function getItem( 4 | contractAddress: string | null, 5 | tokenId: string | null, 6 | items: Record 7 | ): Item | null { 8 | if (!contractAddress || !tokenId) { 9 | return null 10 | } 11 | 12 | const itemId = getItemId(contractAddress, tokenId) 13 | return itemId in items ? items[itemId] : null 14 | } 15 | 16 | export function getItemId(contractAddress: string, tokenId: string) { 17 | return contractAddress + '-' + tokenId 18 | } 19 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/makers_place/index.ts: -------------------------------------------------------------------------------- 1 | import { NFTService } from './NFTService' 2 | import { ContractService } from './ContractService' 3 | import { OrderService } from './OrderService' 4 | 5 | export const VendorName = 'makers_place' 6 | 7 | export * from './types' 8 | export * from './nft' 9 | export * from './routing' 10 | 11 | export * from './NFTService' 12 | export * from './ContractService' 13 | export * from './OrderService' 14 | export const services = { 15 | NFTService, 16 | ContractService, 17 | OrderService 18 | } 19 | -------------------------------------------------------------------------------- /webapp/src/components/TransferPage/TransferPage.css: -------------------------------------------------------------------------------- 1 | .TransferPage .ui.header { 2 | margin-bottom: 8px; 3 | } 4 | 5 | .TransferPage .subtitle { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .TransferPage .subtitle.error { 10 | color: var(--danger); 11 | } 12 | 13 | .TransferPage .warning { 14 | color: var(--danger); 15 | margin-bottom: 24px; 16 | } 17 | 18 | .TransferPage .message { 19 | font-family: var(--font-family); 20 | font-size: 12px; 21 | margin-bottom: 10px; 22 | } 23 | 24 | .TransferPage .form-fields { 25 | width: 420px; 26 | } 27 | -------------------------------------------------------------------------------- /webapp/src/components/UserMenu/UserMenu.types.ts: -------------------------------------------------------------------------------- 1 | import { Dispatch } from 'redux' 2 | import { CallHistoryMethodAction } from 'connected-react-router' 3 | import { UserMenuProps } from 'decentraland-ui' 4 | 5 | export type Props = Partial 6 | 7 | export type MapStateProps = Pick< 8 | Props, 9 | 'isSignedIn' | 'isSigningIn' | 'isActivity' | 'hasActivity' 10 | > 11 | export type MapDispatchProps = Pick< 12 | Props, 13 | 'onClickActivity' | 'onClickSettings' 14 | > 15 | export type MapDispatch = Dispatch 16 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/super_rare/NFTFilters/NFTFilters.types.ts: -------------------------------------------------------------------------------- 1 | import { SortBy } from '../../../../modules/routing/types' 2 | import { browse } from '../../../../modules/routing/actions' 3 | 4 | export type Props = { 5 | count?: number 6 | section: string 7 | sortBy?: SortBy 8 | search: string 9 | onlyOnSale?: boolean 10 | onBrowse: typeof browse 11 | } 12 | 13 | export type MapStateProps = Pick< 14 | Props, 15 | 'count' | 'section' | 'sortBy' | 'search' | 'onlyOnSale' 16 | > 17 | export type OwnProps = Pick 18 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/CategoryBadge/CategoryBadge.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { t } from 'decentraland-dapps/dist/modules/translation/utils' 3 | import IconBadge from '../IconBadge' 4 | import { Props } from './CategoryBadge.types' 5 | 6 | const CategoryBadge = ({ wearable, onClick }: Props) => { 7 | return ( 8 | 13 | ) 14 | } 15 | 16 | export default React.memo(CategoryBadge) 17 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/makers_place/NFTFilters/NFTFilters.types.ts: -------------------------------------------------------------------------------- 1 | import { SortBy } from '../../../../modules/routing/types' 2 | import { browse } from '../../../../modules/routing/actions' 3 | 4 | export type Props = { 5 | count?: number 6 | section: string 7 | sortBy?: SortBy 8 | search: string 9 | onlyOnSale?: boolean 10 | onBrowse: typeof browse 11 | } 12 | 13 | export type MapStateProps = Pick< 14 | Props, 15 | 'count' | 'section' | 'sortBy' | 'search' | 'onlyOnSale' 16 | > 17 | export type OwnProps = Pick 18 | -------------------------------------------------------------------------------- /webapp/src/components/BidPage/BidModal/BidModal.types.ts: -------------------------------------------------------------------------------- 1 | import { Authorization } from 'decentraland-dapps/dist/modules/authorization/types' 2 | import { Wallet } from 'decentraland-dapps/dist/modules/wallet/types' 3 | import { NFT } from '../../../modules/nft/types' 4 | import { placeBidRequest } from '../../../modules/bid/actions' 5 | 6 | export type Props = { 7 | nft: NFT 8 | wallet: Wallet | null 9 | authorizations: Authorization[] 10 | onNavigate: (path: string) => void 11 | onPlaceBid: typeof placeBidRequest 12 | isPlacingBid: boolean 13 | } 14 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/api.ts: -------------------------------------------------------------------------------- 1 | import { VendorName } from './types' 2 | 3 | export const MAX_QUERY_SIZE = 1000 4 | export const MAX_PAGE = 10000 5 | export const PAGE_SIZE = 24 6 | 7 | export function getMaxQuerySize(vendor: VendorName) { 8 | switch (vendor) { 9 | case VendorName.DECENTRALAND: 10 | return MAX_QUERY_SIZE 11 | case VendorName.SUPER_RARE: 12 | return MAX_QUERY_SIZE 13 | case VendorName.MAKERS_PLACE: 14 | return MAX_QUERY_SIZE 15 | case VendorName.KNOWN_ORIGIN: 16 | return MAX_QUERY_SIZE 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /indexer/src/modules/catalyst/index.ts: -------------------------------------------------------------------------------- 1 | import { dataSource } from '@graphprotocol/graph-ts' 2 | import { log } from '@graphprotocol/graph-ts' 3 | 4 | export function getCatalystBase(): string { 5 | let network = dataSource.network() 6 | if (network == 'mainnet' || network == 'matic') { 7 | return 'https://peer-lb.decentraland.org' 8 | } 9 | 10 | if (network == 'ropsten' || network == 'goerli' || network == 'mumbai') { 11 | return 'https://peer.decentraland.zone' 12 | } 13 | 14 | log.debug('Invalid network {}', [network]) 15 | return '' 16 | } 17 | -------------------------------------------------------------------------------- /webapp/src/components/BrowsePage/BrowsePage.types.ts: -------------------------------------------------------------------------------- 1 | import { AssetType } from '../../modules/asset/types' 2 | import { Section } from '../../modules/vendor/routing/types' 3 | import { VendorName } from '../../modules/vendor/types' 4 | 5 | export type Props = { 6 | vendor: VendorName 7 | assetType: AssetType 8 | section: Section 9 | isFullscreen?: boolean 10 | } 11 | 12 | export type MapStateProps = Pick< 13 | Props, 14 | 'vendor' | 'isFullscreen' | 'assetType' | 'section' 15 | > 16 | export type MapDispatchProps = {} 17 | export type MapDispatch = {} 18 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/NFTFilters/FiltersMenu/FiltersMenu.types.ts: -------------------------------------------------------------------------------- 1 | import { Network } from '@dcl/schemas' 2 | import { AssetType } from '../../../../modules/asset/types' 3 | 4 | export type Props = { 5 | assetType: AssetType 6 | selectedCollection?: string 7 | selectedRarities: string[] 8 | selectedGenders: string[] 9 | selectedNetwork?: Network 10 | onCollectionsChange: (contract?: string) => void 11 | onGendersChange: (options: string[]) => void 12 | onRaritiesChange: (options: string[]) => void 13 | onNetworkChange: (network: Network) => void 14 | } 15 | -------------------------------------------------------------------------------- /webapp/src/components/Vendor/PriceChangeNotice/PriceChangeNotice.container.ts: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | 3 | import { RootState } from '../../../modules/reducer' 4 | import { getView } from '../../../modules/ui/browse/selectors' 5 | import { MapStateProps } from './PriceChangeNotice.types' 6 | import PriceChangeNotice from './PriceChangeNotice' 7 | 8 | const mapState = (state: RootState): MapStateProps => ({ 9 | view: getView(state) 10 | }) 11 | 12 | const mapDispatch = () => ({}) 13 | 14 | export default connect(mapState, mapDispatch)(PriceChangeNotice) 15 | -------------------------------------------------------------------------------- /webapp/src/modules/vendor/known_origin/api.ts: -------------------------------------------------------------------------------- 1 | import { ApolloClient } from 'apollo-client' 2 | import { InMemoryCache } from 'apollo-cache-inmemory' 3 | import { HttpLink } from 'apollo-link-http' 4 | 5 | export const API_URL = process.env.REACT_APP_KNOWN_ORIGIN_API_URL 6 | export const MAX_QUERY_SIZE = 1000 7 | 8 | const link = new HttpLink({ 9 | uri: API_URL 10 | }) 11 | 12 | export const client = new ApolloClient({ 13 | link, 14 | cache: new InMemoryCache(), 15 | defaultOptions: { 16 | query: { 17 | fetchPolicy: 'no-cache' 18 | } 19 | } 20 | }) 21 | -------------------------------------------------------------------------------- /indexer/src/data/wearables/Wearable.ts: -------------------------------------------------------------------------------- 1 | export class Wearable { 2 | id: string 3 | name: string 4 | description: string 5 | category: string 6 | rarity: string 7 | bodyShapes: string[] 8 | 9 | constructor( 10 | id: string, 11 | name: string, 12 | description: string, 13 | category: string, 14 | rarity: string, 15 | bodyShapes: string[] 16 | ) { 17 | this.id = id 18 | this.name = name 19 | this.description = description 20 | this.category = category 21 | this.rarity = rarity 22 | this.bodyShapes = bodyShapes 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Sales.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Header } from 'decentraland-ui' 3 | import { t } from 'decentraland-dapps/dist/modules/translation/utils' 4 | import Stats from './Stats' 5 | import Activity from './Activity' 6 | import './Sales.css' 7 | 8 | const Sales = () => { 9 | return ( 10 |
11 |
12 |
{t('sales.stats')}
13 |
14 | 15 | 16 |
17 | ) 18 | } 19 | 20 | export default React.memo(Sales) 21 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Stats/Stats.types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | address: string 3 | totalSales: number 4 | totalEarnings: string 5 | ethereumEarned: string 6 | maticEarned: string 7 | royalties: string 8 | isLoading: boolean 9 | onFetchMetrics: (address: string) => void 10 | } 11 | 12 | export type MapStateProps = Pick< 13 | Props, 14 | | 'address' 15 | | 'totalEarnings' 16 | | 'ethereumEarned' 17 | | 'isLoading' 18 | | 'maticEarned' 19 | | 'totalSales' 20 | | 'royalties' 21 | > 22 | export type MapDispatchProps = Pick 23 | -------------------------------------------------------------------------------- /indexer/src/data/wearables/rtfkt_x_atari.ts: -------------------------------------------------------------------------------- 1 | import { Wearable } from './Wearable' 2 | 3 | export let rtfkt_x_atari: Wearable[] = [ 4 | new Wearable( 5 | 'p_rtfkt_x_atari_feet', 6 | 'Purple RTFKT X Atari Sneakers', 7 | 'RTFKT x Atari sneakers with holographic print.', 8 | 'feet', 9 | 'epic', 10 | ['BaseMale', 'BaseFemale'] 11 | ), 12 | new Wearable( 13 | 'r_rtfkt_x_atari_feet', 14 | 'Red RTFKT X Atari Sneakers', 15 | 'Unique RTFKT x Atari sneakers in red.', 16 | 'feet', 17 | 'unique', 18 | ['BaseMale', 'BaseFemale'] 19 | ) 20 | ] 21 | 22 | -------------------------------------------------------------------------------- /webapp/src/lib/timer.ts: -------------------------------------------------------------------------------- 1 | import { useState, useCallback, useRef } from 'react' 2 | 3 | export const useTimer = (delay: number): [boolean, () => void] => { 4 | const [isRunning, setRunningStatus] = useState(false) 5 | const timeoutRef = useRef() 6 | 7 | const startTimer = useCallback(() => { 8 | if (timeoutRef.current) { 9 | clearTimeout(timeoutRef.current) 10 | } 11 | setRunningStatus(true) 12 | timeoutRef.current = setTimeout(() => setRunningStatus(false), delay) 13 | }, [delay, timeoutRef]) 14 | 15 | return [isRunning, startTimer] 16 | } 17 | -------------------------------------------------------------------------------- /indexer/src/data/wearables/winklevoss_capital.ts: -------------------------------------------------------------------------------- 1 | import { Wearable } from './Wearable' 2 | 3 | export let winklevoss_capital: Wearable[] = [ 4 | new Wearable( 5 | 'winklevoss_hat', 6 | 'Winklevoss Cap', 7 | 'Winklevoss Capital branded cap in signature pink.', 8 | 'hat', 9 | 'epic', 10 | ['BaseMale', 'BaseFemale'] 11 | ), 12 | new Wearable( 13 | 'winklevoss_upper_body', 14 | 'Winklevoss T-Shirt', 15 | 'Winklevoss Capital branded T-shirt in signature pink', 16 | 'upper_body', 17 | 'epic', 18 | ['BaseMale', 'BaseFemale'] 19 | ) 20 | ] 21 | 22 | -------------------------------------------------------------------------------- /webapp/src/components/LandsPage/LandsPage.container.ts: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | 3 | import { RootState } from '../../modules/reducer' 4 | import { getIsFullscreen } from '../../modules/routing/selectors' 5 | import { getIsMap } from '../../modules/routing/selectors' 6 | import { MapStateProps } from './LandsPage.types' 7 | import LandsPage from './LandsPage' 8 | 9 | const mapState = (state: RootState): MapStateProps => ({ 10 | isFullscreen: getIsFullscreen(state) ?? true, 11 | isMap: getIsMap(state) ?? true 12 | }) 13 | 14 | export default connect(mapState, undefined)(LandsPage) 15 | -------------------------------------------------------------------------------- /webapp/src/components/Sales/Activity/Activity.types.ts: -------------------------------------------------------------------------------- 1 | import { Sale } from '@dcl/schemas' 2 | import { Asset } from '../../../modules/asset/types' 3 | import { BrowseOptions } from '../../../modules/routing/types' 4 | 5 | export type Props = { 6 | sales: Sale[] 7 | assets: Record 8 | count: number 9 | page: number 10 | isLoading: boolean 11 | onBrowse: (options: BrowseOptions) => void 12 | } 13 | 14 | export type MapStateProps = Pick< 15 | Props, 16 | 'sales' | 'assets' | 'count' | 'page' | 'isLoading' 17 | > 18 | export type MapDispatchProps = Pick 19 | -------------------------------------------------------------------------------- /webapp/src/images/jump_in.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /webapp/src/lib/mana.ts: -------------------------------------------------------------------------------- 1 | import { fromWei } from 'web3x/utils' 2 | 3 | export function formatMANA(value: string, fixed?: number) { 4 | return Number(fromWei(value, 'ether')).toLocaleString(undefined, { 5 | maximumFractionDigits: fixed 6 | }) 7 | } 8 | 9 | export function toMANA(num: number) { 10 | return num > 0 ? num.toString() : '' 11 | } 12 | 13 | export function fromMANA(mana: string) { 14 | const num = mana.split(/[,|.]/).join('') 15 | 16 | const result = parseInt(num, 10) 17 | 18 | if (isNaN(result) || result < 0) { 19 | return 0 20 | } 21 | 22 | return result 23 | } 24 | -------------------------------------------------------------------------------- /webapp/src/components/AssetBrowse/Box/Box.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import classNames from 'classnames' 3 | import { Props } from './Box.types' 4 | import styles from './Box.module.css' 5 | 6 | const Box = ({ className, header, children, childrenClassName }: Props) => { 7 | return ( 8 |
9 | {header &&
{header}
} 10 |
11 | {children} 12 |
13 |
14 | ) 15 | } 16 | 17 | export default React.memo(Box) 18 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/Description/Description.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Header } from 'decentraland-ui' 3 | import { t } from 'decentraland-dapps/dist/modules/translation/utils' 4 | import { Props } from './Description.types' 5 | import './Description.css' 6 | 7 | const Description = (props: Props) => { 8 | return props.text ? ( 9 |
10 |
{t('asset_page.description')}
11 |
{props.text}
12 |
13 | ) : null 14 | } 15 | 16 | export default React.memo(Description) 17 | -------------------------------------------------------------------------------- /indexer/src/modules/ens/index.ts: -------------------------------------------------------------------------------- 1 | import { BigInt, Bytes } from '@graphprotocol/graph-ts' 2 | import { NFT, ENS } from '../../entities/schema' 3 | 4 | export function buildENSFromNFT(nft: NFT): ENS { 5 | let ens = new ENS(nft.id) 6 | 7 | ens.tokenId = nft.tokenId 8 | ens.owner = nft.owner 9 | 10 | return ens 11 | } 12 | 13 | export function getTokenIdFromLabelHash(labelHash: Bytes): BigInt { 14 | // .reverse() changes the array! we need to change it back 15 | labelHash.reverse() 16 | let tokenId = BigInt.fromUnsignedBytes(labelHash) 17 | labelHash.reverse() 18 | 19 | return tokenId 20 | } 21 | -------------------------------------------------------------------------------- /indexer/src/data/wearables/categories.ts: -------------------------------------------------------------------------------- 1 | export const BODY_SHAPE = 'body_shape' 2 | export const EARRING = 'earring' 3 | export const EYEBROWS = 'eyebrows' 4 | export const EYES = 'eyes' 5 | export const EYEWEAR = 'eyewear' 6 | export const FACIAL_HAIR = 'facial_hair' 7 | export const FEET = 'feet' 8 | export const HAIR = 'hair' 9 | export const HAT = 'hat' 10 | export const HELMET = 'helmet' 11 | export const LOWER_BODY = 'lower_body' 12 | export const MASK = 'mask' 13 | export const MOUTH = 'mouth' 14 | export const TIARA = 'tiara' 15 | export const TOP_HEAD = 'top_head' 16 | export const UPPER_BODY = 'upper_body' 17 | -------------------------------------------------------------------------------- /webapp/src/components/AssetPage/TransactionHistory/TransactionHistory.css: -------------------------------------------------------------------------------- 1 | .TransactionHistory { 2 | position: relative; 3 | } 4 | 5 | .TransactionHistory .mobile-tx-history { 6 | margin-top: 16px; 7 | margin-bottom: 96px; 8 | font-size: 15px; 9 | } 10 | 11 | .TransactionHistory .mobile-tx-history-row { 12 | display: flex; 13 | align-items: center; 14 | justify-content: space-between; 15 | margin-bottom: 8px; 16 | } 17 | 18 | .TransactionHistory .mobile-tx-history-row .when { 19 | color: var(--secondary-text); 20 | } 21 | 22 | .TransactionHistory tbody.is-loading tr { 23 | opacity: 0.5; 24 | } 25 | -------------------------------------------------------------------------------- /webapp/src/components/SignInPage/SignInPage.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { default as SignIn } from 'decentraland-dapps/dist/containers/SignInPage' 3 | import { Page } from 'decentraland-ui' 4 | 5 | import { Navbar } from '../Navbar' 6 | import { Footer } from '../Footer' 7 | import './SignInPage.css' 8 | 9 | const SignInPage = () => { 10 | return ( 11 | <> 12 | 13 | 14 | 15 | 16 |