├── .dev ├── .env ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── faq_update.md │ └── feature_request.md └── dependabot.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── README.md ├── RELEASES.md ├── ROADMAP.md ├── config └── backend_vars.json ├── filters ├── allow.json ├── b.json ├── o.json └── w.json ├── gh-pages ├── html-preview │ ├── index.html │ └── sw.js └── sandbox-svg.html ├── package-lock.json ├── package.json ├── patches └── cborg+1.5.2.patch ├── public ├── HEN_avatar.png ├── _redirects ├── browserconfig.xml ├── favicon.ico ├── galleries │ ├── NFXT_SPACE.json │ ├── cronopios.json │ ├── galleries-backup.json │ ├── galleries.json │ ├── objkt4objkt.json │ ├── pupiladilatada.json │ └── thefen.json ├── hen-pride.gif ├── index.html ├── languages │ ├── de.json │ ├── en.json │ ├── fr.json │ ├── it.json │ ├── ja.json │ ├── pt.json │ └── zh-tw.json ├── manifest.json ├── robots.txt └── sitemap.xml ├── src ├── App.js ├── components │ ├── artist-socials │ │ ├── index.js │ │ └── styles.module.scss │ ├── bottom-banner │ │ ├── index.js │ │ └── styles.module.scss │ ├── button-language │ │ ├── index.js │ │ └── styles.module.scss │ ├── button-theme │ │ ├── index.js │ │ └── styles.module.scss │ ├── button │ │ ├── index.js │ │ └── styles.module.scss │ ├── collab │ │ ├── constants.js │ │ ├── create │ │ │ ├── AddCollaboratorsButton.js │ │ │ ├── BenefactorRow.js │ │ │ ├── BenefactorsUI.js │ │ │ ├── CollaboratorRow.js │ │ │ ├── CollaboratorTable.js │ │ │ ├── ProjectList.js │ │ │ ├── ReviewStage.js │ │ │ ├── ShareAllocationNotice.js │ │ │ ├── TipJar.js │ │ │ └── TipSelector.js │ │ ├── functions.js │ │ ├── index.js │ │ ├── show │ │ │ ├── CollabDisplay.js │ │ │ ├── CollabHeader.js │ │ │ ├── CollabIssuerInfo.js │ │ │ └── CollabParticipant.js │ │ └── styles.module.scss │ ├── feed-item │ │ ├── index.js │ │ └── styles.module.scss │ ├── feedback │ │ ├── index.js │ │ └── styles.module.scss │ ├── footer │ │ ├── index.js │ │ └── styles.module.scss │ ├── header │ │ ├── index.js │ │ └── styles.module.scss │ ├── icons │ │ ├── index.js │ │ └── styles.module.scss │ ├── identicons │ │ ├── index.js │ │ └── styles.module.scss │ ├── input │ │ ├── index.js │ │ └── styles.module.scss │ ├── item-info │ │ ├── index.js │ │ └── styles.module.scss │ ├── layout │ │ ├── README.md │ │ ├── container │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── index.js │ │ ├── padding │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ └── page │ │ │ ├── index.js │ │ │ └── styles.module.scss │ ├── loading │ │ ├── index.js │ │ └── styles.module.scss │ ├── media-assets-display │ │ ├── index.js │ │ └── styles.module.scss │ ├── media-toolbar │ │ ├── index.js │ │ └── index.module.scss │ ├── media-types │ │ ├── audio │ │ │ ├── icons.js │ │ │ ├── index.js │ │ │ ├── style.css │ │ │ ├── styles.module.scss │ │ │ └── visualiser.js │ │ ├── container.js │ │ ├── glb │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── html │ │ │ ├── index.js │ │ │ ├── styles.module.scss │ │ │ └── warning.js │ │ ├── image │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── index.js │ │ ├── md │ │ │ └── index.js │ │ ├── pdf │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── style.css │ │ ├── styles.module.scss │ │ ├── unknown │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── vector │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ └── video │ │ │ ├── index.js │ │ │ ├── style.css │ │ │ └── styles.module.scss │ ├── menu │ │ ├── index.js │ │ └── styles.module.scss │ ├── mimetype-icon │ │ ├── index.js │ │ └── styles.module.scss │ ├── owner-list │ │ ├── index.js │ │ └── styles.module.scss │ ├── owner-swaps │ │ ├── index.js │ │ └── styles.module.scss │ ├── preview │ │ ├── index.js │ │ └── styles.module.scss │ ├── responsive-masonry │ │ ├── index.js │ │ └── styles.module.scss │ ├── settings │ │ ├── index.js │ │ └── styles.module.scss │ ├── tags │ │ ├── index.js │ │ └── styles.module.scss │ ├── upload │ │ ├── index.js │ │ └── styles.module.scss │ └── visually-hidden │ │ ├── index.js │ │ └── styles.module.scss ├── constants.js ├── context │ └── HicetnuncContext.js ├── data │ ├── api.js │ ├── hicdex.js │ └── ipfs.js ├── index.js ├── pages │ ├── about │ │ ├── index.js │ │ └── styles.module.scss │ ├── collaborate │ │ ├── index.js │ │ ├── styles.module.scss │ │ └── tabs │ │ │ ├── create.js │ │ │ ├── index.js │ │ │ └── select.js │ ├── config │ │ ├── index.js │ │ └── styles.module.scss │ ├── data │ │ └── index.js │ ├── defi │ │ └── index.js │ ├── display │ │ ├── index.js │ │ └── styles.module.scss │ ├── faq │ │ ├── index.js │ │ └── styles.module.scss │ ├── feeds │ │ ├── feeds.js │ │ └── index.js │ ├── galleries │ │ ├── index.js │ │ └── styles.module.scss │ ├── gallery-detail │ │ ├── artist-icon │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── artist │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── index.js │ │ ├── item-modal │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── item │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ └── styles.module.scss │ ├── mint │ │ └── index.js │ ├── objkt-display │ │ ├── index.js │ │ ├── style.css │ │ ├── styles.module.scss │ │ └── tabs │ │ │ ├── burn.js │ │ │ ├── collectors.js │ │ │ ├── history.js │ │ │ ├── index.js │ │ │ ├── info.js │ │ │ └── swap.js │ ├── search │ │ ├── index.js │ │ └── style.css │ ├── sync.js │ └── tags │ │ ├── index.js │ │ └── styles.module.scss ├── routes.js ├── serviceWorker.js ├── styles │ ├── IBMPlexMono-Bold.ttf │ ├── IBMPlexMono-BoldItalic.ttf │ ├── IBMPlexMono-ExtraLight.ttf │ ├── IBMPlexMono-ExtraLightItalic.ttf │ ├── IBMPlexMono-Italic.ttf │ ├── IBMPlexMono-Light.ttf │ ├── IBMPlexMono-LightItalic.ttf │ ├── IBMPlexMono-Medium.ttf │ ├── IBMPlexMono-MediumItalic.ttf │ ├── IBMPlexMono-Regular.ttf │ ├── IBMPlexMono-SemiBold.ttf │ ├── IBMPlexMono-SemiBoldItalic.ttf │ ├── IBMPlexMono-Thin.ttf │ ├── IBMPlexMono-ThinItalic.ttf │ ├── fonts │ │ ├── IBMPlexMono-Bold.ttf │ │ ├── IBMPlexMono-BoldItalic.ttf │ │ ├── IBMPlexMono-ExtraLight.ttf │ │ ├── IBMPlexMono-ExtraLightItalic.ttf │ │ ├── IBMPlexMono-Italic.ttf │ │ ├── IBMPlexMono-Light.ttf │ │ ├── IBMPlexMono-LightItalic.ttf │ │ ├── IBMPlexMono-Medium.ttf │ │ ├── IBMPlexMono-MediumItalic.ttf │ │ ├── IBMPlexMono-Regular.ttf │ │ ├── IBMPlexMono-SemiBold.ttf │ │ ├── IBMPlexMono-SemiBoldItalic.ttf │ │ ├── IBMPlexMono-Thin.ttf │ │ └── IBMPlexMono-ThinItalic.ttf │ ├── index.scss │ ├── layout.scss │ ├── main.scss │ ├── mixins.scss │ ├── reset.scss │ ├── typography.scss │ └── variables.scss └── utils │ ├── html.js │ ├── media.js │ ├── motion.js │ ├── os.js │ ├── sanitise.js │ ├── storage.js │ ├── string.js │ └── time.js └── templates ├── html-glslcanvas-template ├── GlslCanvas.min.js ├── README.md ├── index.html ├── shader.frag └── thumbnail.png ├── html-image-scale-audio ├── .babelrc ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── app.js │ ├── app.scss │ ├── index.html │ └── index.js ├── static │ ├── audio.mp3 │ ├── large.jpg │ └── thumbnail.jpg └── webpack.config.js ├── html-image-scale ├── .babelrc ├── README.md ├── package.json ├── src │ ├── app.js │ ├── app.scss │ ├── index.html │ └── index.js ├── static │ ├── large.jpg │ └── thumbnail.jpg └── webpack.config.js ├── html-p5js-template ├── README.md ├── index.html ├── p5.min.js ├── script.js ├── style.css └── thumbnail.gif ├── html-shader-template ├── README.md ├── index.html ├── script.js ├── style.css └── thumbnail.jpg ├── html-template ├── README.md ├── index.html ├── script.js ├── style.css └── thumbnail.jpg ├── html-three-template ├── OrbitControls.js ├── README.md ├── index.html ├── script.js ├── style.css ├── three.module.js └── thumbnail.jpg ├── html-three-webxr-template ├── GLTFLoader.js ├── OrbitControls.js ├── README.md ├── VRButton.js ├── XRControllerModelFactory.js ├── index.html ├── motion-controllers.module.js ├── script.js ├── style.css ├── three.module.js └── thumbnail.jpg ├── svg-p5-template ├── index.html ├── p5.js └── p5.svg.js └── svg-template └── svg-template.svg /.dev: -------------------------------------------------------------------------------- 1 | REACT_APP_IPFS_KEY='' 2 | 3 | REACT_APP_BLOCKLIST_OBJKT='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/main/filters/o.json' 4 | REACT_APP_BLOCKLIST_WALLET='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/main/filters/w.json' 5 | REACT_APP_BLOCKLIST_BAN='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/main/filters/b.json' 6 | 7 | REACT_APP_GRAPHQL_API='https://hdapi.teztools.io/v1/graphql' -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | REACT_APP_IPFS_KEY='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkaWQ6ZXRocjoweEY1NDdDNUIyMjMzMTc3MDZkZDdkODNEMjA4ODRkRDgxOTIxNTBiNEUiLCJpc3MiOiJuZnQtc3RvcmFnZSIsImlhdCI6MTYzMTA1NTgyNTAxMCwibmFtZSI6ImRldiJ9.Uw_dgYXOAA1znTrdXlOlXFYWh9U_pjg4QOl7nrt16SA' 2 | 3 | REACT_APP_BLOCKLIST_OBJKT='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc-reports/main/filters/o.json' 4 | REACT_APP_BLOCKLIST_WALLET='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc-reports/main/filters/w.json' 5 | REACT_APP_BLOCKLIST_BAN='https://raw.githubusercontent.com/hicetnunc2000/hicetnunc-reports/main/filters/b.json' 6 | 7 | REACT_APP_GRAPHQL_API='https://hdapi.teztools.io/v1/graphql' 8 | #REACT_APP_GRAPHQL_API='https://api.hicdex.com/v1/graphql' 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | If you need help with minting or managing assets, we ask to please wait at least 24 hours for issues to clear up. 11 | 12 | Here are some useful tools that you can use to troubleshoot without us in the meantime: 13 | 14 | *See transaction history for an objkt* 15 | https://hicdex.com/objkt 16 | 17 | *See transaction history for your wallet address* 18 | https://hicdex.com/sold 19 | 20 | Please note that the discord is usually the best place to get the fastest support as there are mostly likely others experiencing the same issues as you and active HEN team members assisting with troubleshooting. Please seek help in the #help channel, and read recent dev updates in #dev-announcements. You can join the discord here: https://discord.gg/HhSYY7q5A8 21 | 22 | ----------------------------------------------- 23 | *Please fill out the following Bug Report Template 24 | 25 | **Describe the bug** 26 | A clear and concise description of what the bug is. 27 | 28 | **If you need help with minting or managing assets, please give us the following information** 29 | - your profile link 30 | - any other profile links affected 31 | - tezos wallet address 32 | - objkt #'s that are being affected 33 | 34 | **Screenshots** 35 | - screenshots of your minting process 36 | - screenshots of profiles affected 37 | - screenshots of the browser console (in chrome windows, press ctrl + shift + j to open the developer console) 38 | 39 | **To Reproduce** 40 | Steps to reproduce the behavior: 41 | 1. Go to '...' 42 | 2. Click on '....' 43 | 3. Scroll down to '....' 44 | 4. See error 45 | 46 | **Expected behavior** 47 | A clear and concise description of what you expected to happen. 48 | 49 | **Screenshots** 50 | If applicable, add screenshots to help explain your problem. 51 | 52 | **Desktop (please complete the following information):** 53 | - OS: [e.g. iOS] 54 | - Browser [e.g. chrome, safari] 55 | - Version [e.g. 22] 56 | 57 | **Smartphone (please complete the following information):** 58 | - Device: [e.g. iPhone6] 59 | - OS: [e.g. iOS8.1] 60 | - Browser [e.g. stock browser, safari] 61 | - Version [e.g. 22] 62 | 63 | **Additional context** 64 | Add any other context about the problem here. 65 | Please include the wallet address (tz...) and/or the OBJKT number. 66 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/faq_update.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: FAQ update 3 | about: Submit an update to the Hic et Nunc FAQs 4 | title: 'FAQ: [summary of change]' 5 | labels: FAQ 6 | assignees: violetforest 7 | 8 | --- 9 | 10 | **Summary of change to FAQs you wish to make:** 11 | * For example: new page `foo.md`, edit to page `bar.md`. 12 | * If want to reorder any existing page, note this here too. 13 | 14 | [*enter change here*] 15 | 16 | 17 | **If it's a new page, which navigation heading does it come under** 18 | * For example: Minting guide, FAQs, Misc 19 | 20 | [*enter navigation change here*] 21 | 22 | 23 | **Text change** 24 | * Add here the new text (and old text it's replacing if applicable) 25 | 26 | [*add new and/or replaced text here*] 27 | 28 | 29 | **Markdown** 30 | * If you've written the update using Markdown, replace the `FAQ in markfown format` below with your markdown-tagged text 31 | 32 | ```Markdown 33 | Add FAQ text in Markfown format 34 | ``` 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: feature-request 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "08:00" 8 | open-pull-requests-limit: 10 9 | ignore: 10 | - dependency-name: fflate 11 | versions: 12 | - 0.6.10 13 | - dependency-name: "@taquito/taquito" 14 | versions: 15 | - 8.0.6-beta.0 16 | - 8.1.1 17 | - 9.0.0 18 | - dependency-name: "@taquito/beacon-wallet" 19 | versions: 20 | - 8.0.6-beta.0 21 | - 9.0.0 22 | - dependency-name: framer-motion 23 | versions: 24 | - 3.10.3 25 | - 4.1.10 26 | - 4.1.5 27 | - 4.1.6 28 | - 4.1.9 29 | - dependency-name: "@testing-library/user-event" 30 | versions: 31 | - 13.0.13 32 | - dependency-name: "@airgap/beacon-sdk" 33 | versions: 34 | - 2.2.3 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | # IDEs 6 | .vscode 7 | 8 | # production 9 | /build 10 | /amplify 11 | # misc 12 | #.env_prod 13 | 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | 18 | .DS_Store 19 | 20 | # Elastic Beanstalk Files 21 | .elasticbeanstalk/* 22 | !.elasticbeanstalk/*.cfg.yml 23 | !.elasticbeanstalk/*.global.yml 24 | 25 | # templates 26 | templates/html-image-scale/package-lock.json 27 | templates/html-image-scale/node_modules 28 | templates/html-image-scale/dist 29 | templates/html-image-scale/.parcel-cache 30 | 31 | # contributor specific (local) folders 32 | .next 33 | 34 | #amplify-do-not-edit-begin 35 | amplify/\#current-cloud-backend 36 | amplify/.config/local-* 37 | amplify/logs 38 | amplify/mock-data 39 | amplify/backend/amplify-meta.json 40 | amplify/backend/awscloudformation 41 | amplify/backend/.temp 42 | build/ 43 | dist/ 44 | node_modules/ 45 | aws-exports.js 46 | awsconfiguration.json 47 | amplifyconfiguration.json 48 | amplifyconfiguration.dart 49 | amplify-build-config.json 50 | amplify-gradle-config.json 51 | amplifytools.xcconfig 52 | .secret-* 53 | #amplify-do-not-edit-end 54 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | unsafe-perm=true -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "tabWidth": 2, 5 | "useTabs": false 6 | } 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:latest 2 | 3 | RUN mkdir -p /usr/src/app 4 | WORKDIR /usr/src/app 5 | 6 | COPY package.json /usr/src/app 7 | 8 | RUN npm install 9 | COPY . /usr/src/app 10 | 11 | EXPOSE 3000 12 | CMD ["npm","start"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hicetnunc UI 2 | 3 | this repository is deprecated. 4 | 5 | hicetnunc UI is intended to experiment/integrate different smart contracts designs. 6 | 7 | commands 8 | 9 | ``` 10 | npm i 11 | npm start 12 | ``` 13 | 14 | docker 15 | 16 | ``` 17 | docker image build -t hicetnunc:1.0 . 18 | docker run -it -p 3000:3000 hicetnunc:1.0 19 | ---remove 20 | docker container rm --force hicetnunc 21 | ``` 22 | 23 | disclaimer: no forks or alternative services are associated nor endorsed with this project within the present development context. 24 | 25 | check the issues for contributing 26 | 27 | `MIT license` 28 | 29 | disclaimer: no forks or alternative services are endorsed or have any association to the present project. 30 | -------------------------------------------------------------------------------- /ROADMAP.md: -------------------------------------------------------------------------------- 1 | # Frontend Roadmap 2 | 3 | ## Database 4 | 5 | Integrate with upcoming db, will be new endpoints in API 6 | - allows to query by tag and query by search 7 | - allows to automatically generate a displayUri for old objkts (audio, images, etc) 8 | - configurable hDAO votes/configurable aliases 9 | 10 | 11 | Consider better pagination structure like: 12 | ``` 13 | { 14 | items: [...], 15 | next: 'https://api.hicetnunc.xyz/feed?counter=2', 16 | previous: 'https://api.hicetnunc.xyz/feed?counter=0', 17 | } 18 | ``` 19 | ## Social sharing 20 | 21 | In order to implement SSR I would suggest we migrate from RCA to Next.js. Next.js acts as a single page application but also as a static site generator. which will allow us to generate html pages for all the objkts. 22 | 23 | We can consider other solutions to avoid migration to next.js. 24 | 25 | @crzy: we're not chainging to next.js until we have a stable react version for us to experiment with react-native. Then we can think of next.js along native apps. 26 | -------------------------------------------------------------------------------- /config/backend_vars.json: -------------------------------------------------------------------------------- 1 | { 2 | "hDaoSwap": "KT1QxLqukyfohPV5kPkw97Rs6cw1DDDvYgbB", 3 | "kolibriSwap": "KT1K4EwTpbvYN9agJdjpyJm4ZZdhpUNKB3F6", 4 | "disableFilter": false, 5 | "disableSwapPrices": false, 6 | "filterMinhDAO": 1000, 7 | "filterMaxhDAO": 10000000, 8 | "filterMaxTez": 100000, 9 | "filterMaxKol": 150000, 10 | "filterWeeklyFreeObjkts": 14, 11 | "tzktScorehDAOMultiplier": 1.0, 12 | "curateDefault": 1000 13 | } 14 | -------------------------------------------------------------------------------- /filters/b.json: -------------------------------------------------------------------------------- 1 | ["tz1burnburnburnburnburnburnburjAYjjX"] 2 | -------------------------------------------------------------------------------- /gh-pages/html-preview/sw.js: -------------------------------------------------------------------------------- 1 | let cache = {} 2 | 3 | self.addEventListener('install', function (event) { 4 | event.waitUntil(self.skipWaiting()) 5 | }) 6 | 7 | self.addEventListener('activate', function (event) { 8 | event.waitUntil(self.clients.claim()) 9 | }) 10 | 11 | self.addEventListener('message', (event) => { 12 | if (event.data && event.data.type === 'resources') { 13 | cache = {} 14 | for (let relPath in event.data.payload) { 15 | const basePath = event.data.basePath.replace('index.html', '') 16 | const absPath = basePath + relPath 17 | cache[absPath] = event.data.payload[relPath] 18 | } 19 | } 20 | }) 21 | 22 | self.addEventListener('fetch', (event) => { 23 | const path = getURLPath(event.request.url) 24 | // console.log(path) 25 | if (cache[path]) { 26 | const res = new Response(cache[path]) 27 | event.respondWith(Promise.resolve(res)) 28 | } else { 29 | event.respondWith(fetch(event.request)) 30 | } 31 | }) 32 | 33 | function getURLPath(url, defaults) { 34 | var reUrlPath = /(?:\w+:)?\/\/[^\/]+([^?#]+)/ 35 | var urlParts = url.match(reUrlPath) || [url, defaults] 36 | return urlParts.pop() 37 | } 38 | -------------------------------------------------------------------------------- /gh-pages/sandbox-svg.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | sandbox-svg 5 | 15 | 16 | 17 | 18 | 19 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hicetnunc-ui", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@airgap/beacon-sdk": "^2.3.12", 7 | "@babel/core": "^7.14.5", 8 | "@taquito/beacon-wallet": "^12.0.0", 9 | "@taquito/michelson-encoder": "^12.0.0", 10 | "@taquito/taquito": "^12.0.0", 11 | "@testing-library/jest-dom": "^5.14.1", 12 | "@testing-library/react": "^11.2.7", 13 | "@testing-library/user-event": "^13.1.9", 14 | "axios": "^0.26.1", 15 | "base-x": "^3.0.8", 16 | "big-integer": "^1.6.48", 17 | "buffer": "^6.0.3", 18 | "classnames": "^2.3.1", 19 | "compressorjs": "^1.1.1", 20 | "conseiljs-softsigner": "^5.0.4-1", 21 | "d3": "^7.1.1", 22 | "eztz": "^1.1.2", 23 | "eztz-lib": "^0.1.2", 24 | "fetch": "^1.1.0", 25 | "fflate": "^0.7.3", 26 | "filereader": "^0.10.3", 27 | "framer-motion": "^4.1.16", 28 | "ipfs-api": "^26.1.2", 29 | "ipfs-http-client": "^53.0.1", 30 | "ipfs-only-hash": "^4.0.0", 31 | "local-storage": "^2.0.0", 32 | "lodash": "^4.17.21", 33 | "markdown-to-jsx": "^7.1.3", 34 | "mime-types": "^2.1.30", 35 | "node-fetch": "^2.6.1", 36 | "node-sass": "^6.0.0", 37 | "react": "^17.0.1", 38 | "react-dom": "^17.0.1", 39 | "react-helmet": "^6.1.0", 40 | "react-infinite-scroll-component": "^6.1.0", 41 | "react-intersection-observer": "^8.32.0", 42 | "react-lazy-load-image-component": "^1.5.1", 43 | "react-masonry-css": "^1.0.16", 44 | "react-pdf": "^5.3.0", 45 | "react-player": "^2.8.2", 46 | "react-router": "^5.2.0", 47 | "react-router-dom": "^5.2.0", 48 | "react-scripts": "^4.0.3", 49 | "react-scroll": "^1.8.1", 50 | "read-json-lines-sync": "^2.1.7", 51 | "screenfull": "^5.1.0", 52 | "web-encoding": "1.1.5" 53 | }, 54 | "scripts": { 55 | "postinstall": "npx patch-package", 56 | "start": "react-scripts start", 57 | "build": "react-scripts build", 58 | "test": "react-scripts test", 59 | "eject": "react-scripts eject", 60 | "eb:prod": "npm run build && npm run start:prod", 61 | "prettier": "prettier --write \"./src/**/*.{js,jsx}\"" 62 | }, 63 | "eslintConfig": { 64 | "extends": "react-app" 65 | }, 66 | "browserslist": { 67 | "production": [ 68 | ">0.2%", 69 | "not dead", 70 | "not op_mini all" 71 | ], 72 | "development": [ 73 | "last 1 chrome version", 74 | "last 1 firefox version", 75 | "last 1 safari version" 76 | ] 77 | }, 78 | "devDependencies": { 79 | "prettier": "^2.3.0" 80 | }, 81 | "module": "commonjs", 82 | "homepage": "." 83 | } 84 | -------------------------------------------------------------------------------- /public/HEN_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/5ae906708346e3f3da0820d5ae88a55cd21506c4/public/HEN_avatar.png -------------------------------------------------------------------------------- /public/_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/5ae906708346e3f3da0820d5ae88a55cd21506c4/public/favicon.ico -------------------------------------------------------------------------------- /public/galleries/NFXT_SPACE.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "NFXT SPACE", 3 | "uid": "nfxtspace", 4 | "description": "HERE x NOW x NEXT is the first digital exhibition by Malaysian art collective NFXT. NFXT shares a vision to be a frontier in providing exposure to rising local artists on the global stage of the digital art world, as well as being a community that advocates knowledge sharing and the betterment of people through art.", 5 | "minimal": true, 6 | "data": [ 7 | { 8 | "artist": "NFXT SPACE announcements", 9 | "objkt": [54291] 10 | }, 11 | { 12 | "artist": "Mumu", 13 | "wallet": "tz1cALmpTf7EeeSBXHAX2rcnR4WAP8tSWkt6", 14 | "objkt": [37601, 37816] 15 | }, 16 | { 17 | "artist": "Jiwo", 18 | "wallet": "tz1Yf87KmBxciyzAEwzW6VFtRV8mSZ6YrhNr", 19 | "objkt": [37028, 37468] 20 | }, 21 | { 22 | "artist": "Vuevossa", 23 | "wallet": "tz1hBuC8fjdVUoLSZ8Xh7wsruGmQ3rN1HsgL", 24 | "objkt": [37380, 37393] 25 | }, 26 | { 27 | "artist": "Mulo", 28 | "wallet": "tz1atGE9rDtNnE13yT4m5RPYBSTxJCsQngeT", 29 | "objkt": [37653] 30 | }, 31 | { 32 | "artist": "Nero One", 33 | "wallet": "tz1UH9shZ3hSio2nuwpRPHwvockWa3XWMNA9", 34 | "objkt": [4782, 24049] 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /public/galleries/cronopios.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Cronopios", 3 | "uid": "cronopios", 4 | "description": "“A Cronopio is a flower. Two are a garden.” — Julio Cortázar", 5 | "staging": "https://hen-fen.netlify.app/gallery/cronopios", 6 | "minimal": false, 7 | "data": [ 8 | { 9 | "artist": "Collaborations", 10 | "objkt": [23001, 53662] 11 | }, 12 | { 13 | "artist": "Solo Works", 14 | "objkt": [15770, 15 | 44707, 16 | 4419, 17 | 8971, 18 | 48250, 19 | 12738, 20 | 49195, 21 | 49800, 22 | 41087, 23 | 27795, 24 | 52143, 25 | 1149, 26 | 18194, 27 | 46422, 28 | 47787, 29 | 7986, 30 | 50099] 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /public/galleries/galleries-backup.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "uid": "pupiladilatada", 4 | "name": "Pupila Dilatada", 5 | "endpoint": "/galleries/pupiladilatada.json", 6 | "thumbnail": "833" 7 | }, 8 | { 9 | "uid": "objkt4objkt", 10 | "name": "OBJKT4OBJKT", 11 | "endpoint": "/galleries/objkt4objkt.json", 12 | "thumbnail": "12077" 13 | }, 14 | { 15 | "uid": "thefen", 16 | "name": "The FEN", 17 | "endpoint": "https://raw.githubusercontent.com/joanielemercier/The_fen/main/thefen.json", 18 | "thumbnail": "34413" 19 | }, 20 | { 21 | "uid": "nfxtspace", 22 | "name": "NFXT SPACE", 23 | "endpoint": "/galleries/nfxt_space.json", 24 | "thumbnail": "54291" 25 | }, 26 | { 27 | "uid": "cronopios", 28 | "name": "Cronopios", 29 | "endpoint": "/galleries/cronopios.json", 30 | "thumbnail": "54715" 31 | } 32 | ] 33 | -------------------------------------------------------------------------------- /public/galleries/galleries.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "uid": "pupiladilatada", 4 | "name": "Pupila Dilatada", 5 | "endpoint": "/galleries/pupiladilatada.json", 6 | "id": "833" 7 | }, 8 | { 9 | "uid": "objkt4objkt", 10 | "name": "OBJKT4OBJKT", 11 | "endpoint": "/galleries/objkt4objkt.json", 12 | "id": "12077" 13 | }, 14 | { 15 | "uid": "thefen", 16 | "name": "The FEN", 17 | "endpoint": "https://raw.githubusercontent.com/joanielemercier/The_fen/main/thefen.json", 18 | "id": "34413" 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /public/galleries/pupiladilatada.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Pupila Dilatada", 3 | "uid": "pupiladilatada", 4 | "description": "Pupila Dilatada. First Tezos collaborative nftart show opened on March 25, 2021. Pupila Dilatada, dilated pupil in English, is one of the first signs that you are high, the psychedelic substance that you take is working and maybe, right now, your consciousness is altered and we are in another dimension.", 5 | "minimal": true, 6 | "data": [ 7 | { 8 | "objkt": [ 9 | 7361, 10 | 7781, 11 | 9184, 12 | 7265, 13 | 8201, 14 | 9778, 15 | 10374, 16 | 10534, 17 | 10617, 18 | 10680, 19 | 11281, 20 | 6796, 21 | 11505, 22 | 11552, 23 | 11673, 24 | 11699, 25 | 11765, 26 | 11847, 27 | 11893, 28 | 11783, 29 | 11930, 30 | 12462, 31 | 10666, 32 | 12021, 33 | 12041, 34 | 12483, 35 | 12473, 36 | 11272, 37 | 10102, 38 | 12039, 39 | 12189, 40 | 12186, 41 | 6869, 42 | 8214, 43 | 12413, 44 | 12349, 45 | 11763, 46 | 11583, 47 | 11628, 48 | 11698 49 | ] 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /public/galleries/thefen.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "TheFEN", 3 | "uid": "thefen", 4 | "description": "“The Fen” is a series of coordinated CryptoArt drops to encourage artists and collectors to transition their NFTs to a low-energy consumption blockchain.", 5 | "staging": "https://hen-fen.netlify.app/gallery/thefen", 6 | "minimal": false, 7 | "data": [ 8 | { 9 | "artist": "The Fen announcements", 10 | "wallet": "tz1foxWsEdPqWjMFe5G7z2FGmEiCwLpZSnZx", 11 | "objkt": [34413, 27355] 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /public/hen-pride.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hicetnunc2000/hicetnunc/5ae906708346e3f3da0820d5ae88a55cd21506c4/public/hen-pride.gif -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 25 | hic et nunc 26 | 27 | 28 | 29 | 30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /public/languages/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "header": { 3 | "sync": "シンク", 4 | "menu": [ 5 | { "primary": "○", "route": "/hdao" }, 6 | { "primary": "random", "route": "/random" }, 7 | { 8 | "primary": "OBJKTs", 9 | "route": "/mint" 10 | }, 11 | { "primary": "作品管理", "route": "/sync" }, 12 | { "primary": "hic et nunc について", "route": "/about" } 13 | ] 14 | }, 15 | "footer": { 16 | "mint": "シンク -> 作品収集 // シンク -> ミント // シンク -> スワップ" 17 | }, 18 | "home": { 19 | "latest": "最新", 20 | "hDAO": "hDAO", 21 | "more": "もっと読み込む" 22 | }, 23 | "mint": { 24 | "title": "作品タイトル", 25 | "description": "説明", 26 | "tags": "タグ (カンマ区切り)", 27 | "amount": "ミント(生成)する数", 28 | "upload": "OBJKTをアップロード", 29 | "supports": "サポート", 30 | "preview": "プレビュー", 31 | "mint": "ミントする", 32 | "warning": "この操作にかかる費用は0.08〜tezです。 デフォルトで10%のロイヤリティフィーが設定されています。" 33 | }, 34 | "manage": { 35 | "creations": "作品一覧", 36 | "collection": "コレクション" 37 | }, 38 | "about": { 39 | "title": "hic et nunc", 40 | "paragraphs": [ 41 | "この分散型アプリケーションは、テゾスブロックチェーン上で稼働する分散型デジタル資産を管理するための公開スマートコントラクトインフラストラクチャです。", 42 | "IPFS OBJKT資産は、パーミッションレスにミント(生成)や取引ができます。 この実験は、暗号技術を応用した経済のオルタナティブを模索することを意図して設計されました。", 43 | "私たちはあなたのセキュリティと各々の自律的な規範を大切にしたいと思います。 取引の際は情報を慎重にご確認ください。", 44 | "ご意見、ご質問やこのアプリケーションに関する議論については、%EMAIL%、%DISCORD%、%REDDIT%から連絡してください。", 45 | "%WIKI%を一度お読みください。", 46 | "ウェブサイトに問題がある場合は、%ISSUE% にて報告してください" 47 | ] 48 | }, 49 | "detail": { 50 | "editions": "エディション", 51 | "issuer": "発行者", 52 | "notForSale": "非売品", 53 | "soldOut": "完売", 54 | "collect": "%PRICE%で取得する", 55 | "menuInfo": "情報", 56 | "menuOwners": "所有者", 57 | "menuSwap": "スワップ", 58 | "menuCancel": "キャンセル", 59 | "menuBurn": "破棄する", 60 | "info": { 61 | "title": "作品名", 62 | "description": "説明", 63 | "tags": "タグ" 64 | }, 65 | "owners": { 66 | "title": "未所有" 67 | }, 68 | "swap": { 69 | "amount": "OBJKTsのスワップ数", 70 | "price": "1 OBJKT あたりの価格 (tez)", 71 | "cta": "交換", 72 | "warning": "1tez 以上の価格がついているものは、プラットフォームのメンテナンスに2.5%の手数料がかかります" 73 | }, 74 | "cancel": { 75 | "title": "スワップをキャンセルしますか?", 76 | "cta": "キャンセル" 77 | }, 78 | "burn": { 79 | "title": "OBJKTを破棄(Burn)すると、ネットワークから完全に削除されます。", 80 | "cta": "破棄する" 81 | }, 82 | "confirm": "本当に?(再度確認)" 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /public/languages/zh-tw.json: -------------------------------------------------------------------------------- 1 | { 2 | "header": { 3 | "sync": "同步", 4 | "menu": [ 5 | { "primary": "○", "route": "/hdao" }, 6 | { "primary": "random", "route": "/random" }, 7 | { "primary": "OBJKTs", "route": "/mint" }, 8 | { "primary": "作品管理", "route": "/sync" }, 9 | { "primary": "關於hic et nunc", "route": "/about" } 10 | ] 11 | }, 12 | "footer": { 13 | "mint": "訪問個人資料 ✨ 在執行交易時驗證您的操作.", 14 | "warning": "有意識地使用它,訪問藝術家資料,請勿抄襲" 15 | }, 16 | "home": { 17 | "latest": "最新", 18 | "hDAO": "hDAO", 19 | "more": "讀取更多" 20 | }, 21 | "mint": { 22 | "title": "標題", 23 | "description": "描述", 24 | "tags": "tags (用逗號分隔)", 25 | "amount": "鑄造的數量", 26 | "upload": "上傳你的 OBJKT", 27 | "supports": "支援", 28 | "preview": "預覽", 29 | "mint": "鑄造", 30 | "warning": "這個操作會花費 0.08~ tez. 預設10%的專利權使用費" 31 | }, 32 | "manage": { 33 | "creations": "創作一覽", 34 | "collection": "藝術收集" 35 | }, 36 | "about": { 37 | "title": "hic et nunc", 38 | "paragraphs": [ 39 | "目前的去中心化應用程序允許其用戶管理去中心化數位資產,作為Tezos區塊鏈上的公共智能合約基礎設施。", 40 | "IPFS OBJKTs 這種實驗的設計意圖是想像另一種加密經濟。", 41 | "我們關注您的安全和自主性,請在交易時確認訊息。", 42 | "如果你想諮詢或詢問更多問題,請聯繫我們 %EMAIL%, %DISCORD%, or on %REDDIT%.", 43 | "請閱讀我們的 %WIKI%.", 44 | "如果您對網站有任何問題, 請在 %ISSUE% 回報" 45 | ] 46 | }, 47 | "detail": { 48 | "editions": "版本", 49 | "issuer": "發行人", 50 | "notForSale": "目前不販售", 51 | "soldOut": "已售完", 52 | "collect": "收取 %PRICE%", 53 | "menuInfo": "資料", 54 | "menuOwners": "擁有者", 55 | "menuSwap": "交易", 56 | "menuCancel": "取消", 57 | "menuBurn": "銷毀", 58 | "info": { 59 | "title": "標題", 60 | "description": "描述", 61 | "tags": "TAGS" 62 | }, 63 | "owners": { 64 | "title": "沒有擁有者" 65 | }, 66 | "swap": { 67 | "amount": "交易OBJKTs的數量", 68 | "price": "每一個OBJKT的價格 (in tez)", 69 | "cta": "交易", 70 | "warning": "帶有價值的交易,將被收取2.5%的平台維護費" 71 | }, 72 | "cancel": { 73 | "title": "您將要取消您的交易", 74 | "cta": "取消" 75 | }, 76 | "burn": { 77 | "title": "銷毀您的 OBJKT 將永遠地從網路中刪除它", 78 | "cta": "銷毀" 79 | }, 80 | "confirm": "你確定嗎?" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-Agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | https://www.hicetnunc.xyz 4 | 5 | 6 | https://www.hicetnunc.xyz/hdao 7 | 8 | 9 | https://www.hicetnunc.xyz/random 10 | 11 | 12 | https://www.hicetnunc.xyz/about 13 | 14 | 15 | https://www.hicetnunc.xyz/mint 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import { Switch, Route, BrowserRouter, HashRouter } from 'react-router-dom' 3 | import HicetnuncContextProvider from './context/HicetnuncContext' 4 | import { getInitialData } from './data/api' 5 | import { Header } from './components/header' 6 | import { Loading as Preloading } from './components/loading' 7 | import { FeedbackComponent } from './components/feedback' 8 | import { routes } from './routes' 9 | import { Galleries } from './pages/galleries' 10 | import { Config } from './pages/config' 11 | import { Search } from './pages/search' 12 | import { Latest, Hdao, Random, Featured } from './pages/feeds' 13 | import Display from './pages/display' 14 | import { About } from './pages/about' 15 | import { FAQ } from './pages/faq' 16 | import { CollabDisplay, Collaborate } from './pages/collaborate' 17 | import { ObjktDisplay } from './pages/objkt-display' 18 | import { GalleryDetail } from './pages/gallery-detail' 19 | 20 | const App = () => { 21 | const [loading, setLoading] = useState(true) 22 | 23 | // 1st time loading the site ??? 24 | useEffect(() => { 25 | console.log(window.location.pathname) 26 | getInitialData().then(() => { 27 | setLoading(false) 28 | }) 29 | }, []) 30 | 31 | if (loading) { 32 | return 33 | } 34 | 35 | return ( 36 | 37 |
38 | 39 | 40 | 41 | {routes.map(({ exact, path, component: Comp }) => ( 42 | 43 | ))} 44 | 45 | 46 | 47 | ) 48 | } 49 | 50 | export default App 51 | -------------------------------------------------------------------------------- /src/components/artist-socials/styles.module.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | svg { 3 | path { 4 | fill: var(--text-color); 5 | } 6 | 7 | &:hover { 8 | opacity: 0.7; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/components/bottom-banner/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styles from './styles.module.scss' 3 | 4 | export const BottomBanner = ({ children = null }) => { 5 | return
{children}
6 | } 7 | -------------------------------------------------------------------------------- /src/components/bottom-banner/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | @import '../../styles/layout.scss'; 3 | 4 | .container { 5 | background: var(--background-color); 6 | padding: 10px; 7 | font-size: 15px; 8 | text-align: justify; 9 | position: fixed; 10 | bottom: 0; 11 | left: 0; 12 | right: 0; 13 | z-index: 999; 14 | a { 15 | color: var(--text-color); 16 | font-weight: bold; 17 | } 18 | } 19 | 20 | html { 21 | margin-bottom: 10px!important; 22 | @include respond-to('phone') { 23 | margin-bottom: 20px!important; 24 | .container { 25 | padding: 5px; 26 | font-size: 13px; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /src/components/button-language/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { getItem, setItem } from '../../utils/storage' 3 | import styles from './styles.module.scss' 4 | 5 | // DO NOT ENABLE THIS JUST YET (Andre) 6 | const languages = [ 7 | { key: 'en', title: 'english' }, 8 | // { key: 'de', title: 'german' }, 9 | // { key: 'fr', title: 'french' }, 10 | // { key: 'ja', title: 'japanese' }, 11 | // { key: 'pt', title: 'português' }, 12 | ] 13 | 14 | export const ButtonLanguage = () => { 15 | const language = getItem('language') || setItem('language', languages[0].key) 16 | 17 | const handleChange = (e) => { 18 | setItem('language', e.target.value) 19 | window.location.reload() 20 | } 21 | 22 | return ( 23 | 36 | ) 37 | } 38 | -------------------------------------------------------------------------------- /src/components/button-language/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | 3 | .container { 4 | color: var(--background-color); 5 | transition: color #{$theme-duration} ease-out; 6 | background-color: transparent; 7 | border: none; 8 | 9 | &:focus { 10 | outline: none; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/components/button-theme/index.js: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react' 2 | import { HicetnuncContext } from '../../context/HicetnuncContext' 3 | import styles from './styles.module.scss' 4 | 5 | export const ButtonTheme = () => { 6 | const context = useContext(HicetnuncContext) 7 | return ( 8 |
11 | context.setTheme(context.theme === 'light' ? 'dark' : 'light') 12 | } 13 | /> 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /src/components/button-theme/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | 3 | .container { 4 | display: flex; 5 | width: 16px; 6 | height: 16px; 7 | border-radius: 50%; 8 | background-color: var(--background-color); 9 | transition: background-color #{$theme-duration} ease-out, 10 | color #{$theme-duration} ease-out; 11 | z-index: 1000; 12 | cursor: pointer; 13 | } 14 | -------------------------------------------------------------------------------- /src/components/button/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import classnames from 'classnames' 4 | import styles from './styles.module.scss' 5 | 6 | export const Button = ({ 7 | to = null, 8 | href = null, 9 | onClick = () => null, 10 | children, 11 | disabled, 12 | fit, 13 | }) => { 14 | const classes = classnames({ 15 | [styles.container]: true, 16 | [styles.disabled]: disabled, 17 | [styles.fit]: fit, 18 | }) 19 | 20 | if (to) { 21 | return ( 22 | 23 | {children} 24 | 25 | ) 26 | } 27 | 28 | if (href) { 29 | return ( 30 | 36 | {children} 37 | 38 | ) 39 | } 40 | return ( 41 | 44 | ) 45 | } 46 | 47 | export const Primary = ({ children = null, selected }) => { 48 | const classes = classnames({ 49 | [styles.primary]: true, 50 | [styles.selected]: selected, 51 | }) 52 | return
{children}
53 | } 54 | 55 | export const Secondary = ({ children = null, selected }) => { 56 | const classes = classnames({ 57 | [styles.secondary]: true, 58 | [styles.selected]: selected, 59 | }) 60 | return
{children}
61 | } 62 | 63 | export const Purchase = ({ children = null, selected }) => { 64 | const classes = classnames({ 65 | [styles.purchase]: true, 66 | [styles.selected]: selected, 67 | }) 68 | return
{children}
69 | } 70 | 71 | export const Curate = ({ children = null, selected }) => { 72 | const classes = classnames({ 73 | [styles.curate]: true, 74 | [styles.selected]: selected, 75 | }) 76 | return
{children}
77 | } 78 | -------------------------------------------------------------------------------- /src/components/button/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | @import '../../styles/mixins.scss'; 3 | 4 | .container { 5 | @include resetButton(); 6 | 7 | &.fit { 8 | display: contents; 9 | } 10 | 11 | &.disabled, 12 | &:disabled { 13 | pointer-events: none; 14 | cursor: unset; 15 | opacity: 0.5; 16 | } 17 | } 18 | 19 | .primary { 20 | color: var(--text-color); 21 | transition: color #{$theme-duration} ease-out; 22 | 23 | &.selected { 24 | font-weight: bold; 25 | } 26 | 27 | @include hover { 28 | &:not(.selected) { 29 | text-decoration: underline; 30 | } 31 | } 32 | } 33 | 34 | .secondary { 35 | color: var(--text-color); 36 | transition: color #{$theme-duration} ease-out; 37 | 38 | @include hover { 39 | text-decoration: none; 40 | } 41 | } 42 | 43 | .purchase { 44 | padding: 2px 6px; 45 | color: var(--text-color); 46 | border-right: 2px solid var(--text-color); 47 | border-bottom: 2px solid var(--text-color); 48 | transition: border-color #{$theme-duration} ease-out, 49 | color #{$theme-duration} ease-out; 50 | } 51 | 52 | .curate { 53 | opacity: inherit; 54 | margin-bottom: 10px; 55 | cursor: pointer; 56 | 57 | padding: 2px 6px; 58 | width: 100%; 59 | color: black; // this colour doesnt change 60 | background-color: rgb(239, 239, 239); 61 | border-right: 2px solid var(--text-color); 62 | border-bottom: 2px solid var(--text-color); 63 | transition: border-color #{$theme-duration} ease-out, 64 | color #{$theme-duration} ease-out; 65 | } 66 | -------------------------------------------------------------------------------- /src/components/collab/constants.js: -------------------------------------------------------------------------------- 1 | export const CollaboratorType = { 2 | ADMIN: 'admin', 3 | CREATOR: 'creator', 4 | BENEFACTOR: 'benefactor', 5 | } 6 | 7 | export const ossProjects = [ 8 | { 9 | name: 'H=N Tezos Fountain', 10 | address: 'tz1eggoxCes1qYRGLc3E1bg4uzuCUUuuQBb9', 11 | }, 12 | { 13 | name: 'three.js', 14 | address: 'tz1ZUohCAkGjp7vPjQcC4VWcpgYZR1t3Si5C', 15 | }, 16 | { 17 | name: 'Processing', 18 | address: 'tz1aPHze1U5BEEKrGYt3dvY6aAQEeiWm8jjK', 19 | } 20 | ] 21 | 22 | export const collaboratorTemplate = { 23 | address: '', 24 | shares: undefined, 25 | } 26 | 27 | export const tipOptions = [ 1, 5, 10 ] 28 | 29 | export const mockData = [{ 30 | address: 'tz1YJvMiZyXnzvV9pxtAiuCFvaG7XoBZhbUQ', 31 | shares: 50, 32 | }, { 33 | address: 'tz2Hz4TVJZjoQVks4SfWgt38RfZTmrHmVH62', 34 | shares: 50, 35 | }]; 36 | -------------------------------------------------------------------------------- /src/components/collab/create/AddCollaboratorsButton.js: -------------------------------------------------------------------------------- 1 | import { Button, Purchase } from "../../button" 2 | import styles from '../styles.module.scss' 3 | 4 | export const AddCollaboratorsButton = ({ collaborators, onClick, threshold = 2 }) => { 5 | 6 | const validCollaborators = collaborators.filter(c => c.shares && c.address) 7 | 8 | return ( 9 |
10 | 13 |
14 | ) 15 | } -------------------------------------------------------------------------------- /src/components/collab/create/ProjectList.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import classNames from 'classnames' 3 | import { Secondary } from '../../button' 4 | import styles from '../styles.module.scss' 5 | import { ossProjects } from '../constants' 6 | 7 | export const ProjectList = ({ benefactors, onSelect }) => { 8 | const [showList, setShowList] = useState(false) 9 | 10 | const benefactorAddresses = benefactors.map(b => b.address) 11 | const validBenefactors = benefactors.filter(b => b.address && b.shares) 12 | const unselectedProjects = ossProjects.filter(project => benefactorAddresses.indexOf(project.address) === -1) 13 | const btnClass = classNames(styles.btn, { 14 | [styles.muted]: showList || unselectedProjects.length < ossProjects.length || validBenefactors.length > 0, 15 | [styles.absolute] : showList, 16 | }) 17 | 18 | const _select = (address, name) => { 19 | onSelect(address, name) 20 | setShowList(false) 21 | } 22 | 23 | return unselectedProjects.length > 0 ? ( 24 |
25 | 30 | 31 | {showList && ( 32 |
    33 | {unselectedProjects.map(project => { 34 | const { name, address } = project 35 | 36 | return ( 37 |
  • 38 | 39 |
  • 40 | ) 41 | })} 42 |
43 | )} 44 |
45 | ) : null 46 | } -------------------------------------------------------------------------------- /src/components/collab/create/ShareAllocationNotice.js: -------------------------------------------------------------------------------- 1 | import styles from '../styles.module.scss' 2 | 3 | export const ShareAllocationNotice = ({ collaborators, muted }) => { 4 | 5 | // Add everything up and see if the total is less than 100. If so, show this notice 6 | const totalAllocated = Math.min(collaborators.reduce((total, c) => total + (Number(c.percentage) || 0), 0), 100) 7 | const validCollaborators = collaborators.filter(c => c.percentage && c.address) 8 | const showPercentageMismatchNotice = (totalAllocated > 0 && collaborators.length > 1 && validCollaborators.length > 0) 9 | 10 | return showPercentageMismatchNotice ? ( 11 |
12 |

{totalAllocated}% allocated

13 | {totalAllocated < 100 && ( 14 |

Please make sure your shares add up to 100%

15 | )} 16 |
17 | ) : null 18 | } -------------------------------------------------------------------------------- /src/components/collab/create/TipJar.js: -------------------------------------------------------------------------------- 1 | import styles from './styles.module.scss' 2 | import { ossProjects } from '../constants' 3 | import { TipSelector } from './TipSelector' 4 | 5 | export const TipJar = ({ tips, setTips }) => { 6 | 7 | const tipsByAddress = tips.map(t => t.address) 8 | 9 | const toggleTip = (address) => { 10 | const updatedTips = [...tips] 11 | 12 | const index = tipsByAddress.indexOf(address) 13 | 14 | if (index > -1) { 15 | updatedTips.splice(index, 1) 16 | } else { 17 | const projectsByAddress = ossProjects.map(project => project.address) 18 | const index = projectsByAddress.indexOf(address) 19 | const project = ossProjects[index] 20 | 21 | updatedTips.push(project) 22 | } 23 | 24 | setTips(updatedTips) 25 | } 26 | 27 | const _updateTip = (address, percentage) => { 28 | const updatedTips = [...tips] 29 | const projectsByAddress = updatedTips.map(t => t.address); 30 | const index = projectsByAddress.indexOf(address); 31 | 32 | // toggle if it's the same value 33 | const shouldRemove = updatedTips[index] ? (updatedTips[index].percentage === percentage) : false 34 | 35 | updatedTips[index] = { 36 | ...tips[index], 37 | percentage: shouldRemove ? undefined : percentage, 38 | } 39 | 40 | setTips(updatedTips) 41 | } 42 | 43 | return ( 44 |
    45 | 46 | {ossProjects.map((project, projectIndex) => { 47 | const { name, address } = project 48 | const isChecked = tipsByAddress.indexOf(address) > -1 49 | 50 | return ( 51 |
  • 52 |
    53 | 59 | 60 | {isChecked && ( 61 | _updateTip(project.address, percentage)} 64 | /> 65 | )} 66 |
    67 |
  • 68 | ) 69 | })} 70 |
71 | ) 72 | } -------------------------------------------------------------------------------- /src/components/collab/create/TipSelector.js: -------------------------------------------------------------------------------- 1 | import styles from '../styles.module.scss' 2 | import { tipOptions } from '../constants' 3 | 4 | export const TipSelector = ({ onSelect }) => { 5 | return ( 6 |
7 | {tipOptions.map(percentage => { 8 | return ( 9 | 12 | ) 13 | })} 14 |
15 | ) 16 | } -------------------------------------------------------------------------------- /src/components/collab/functions.js: -------------------------------------------------------------------------------- 1 | export const extractAddress = (input) => { 2 | const tzPattern = /^.*(tz[\w\d]{34}).*$/i 3 | let matches = tzPattern.exec(input.trim()) 4 | 5 | // Check for contract patterns 6 | if (!matches) { 7 | const ktPattern = /^.*(kt[\w\d]{34}).*$/i 8 | matches = ktPattern.exec(input.trim()) 9 | } 10 | 11 | if (!matches) { 12 | return false 13 | } 14 | 15 | return matches[1]; 16 | } 17 | 18 | export const groupShareTotal = collaborators => collaborators.reduce((sharesAllocated, c) => (c.shares || 0) + sharesAllocated, 0) 19 | -------------------------------------------------------------------------------- /src/components/collab/index.js: -------------------------------------------------------------------------------- 1 | import { BenefactorRow } from "./create/BenefactorRow"; 2 | import { BenefactorsUI } from "./create/BenefactorsUI"; 3 | import { CollaboratorRow } from "./create/CollaboratorRow"; 4 | import { CollaboratorTable } from "./create/CollaboratorTable"; 5 | import { ShareAllocationNotice } from "./create/ShareAllocationNotice"; 6 | import { collaboratorTemplate } from "./constants" 7 | // import { TipJar } from "./TipJar" 8 | 9 | const CloseIcon = () => { 10 | return ( 11 | 12 | ) 13 | } 14 | 15 | export { 16 | CloseIcon, 17 | BenefactorRow, 18 | BenefactorsUI, 19 | CollaboratorRow, 20 | CollaboratorTable, 21 | ShareAllocationNotice, 22 | collaboratorTemplate, 23 | } -------------------------------------------------------------------------------- /src/components/collab/show/CollabHeader.js: -------------------------------------------------------------------------------- 1 | import { Fragment } from 'react' 2 | import { Container, Padding } from '../../layout' 3 | import { CollabParticipant } from './CollabParticipant' 4 | 5 | export const CollabHeader = ({ collaborators }) => { 6 | return ( 7 | 8 | 9 |

10 | {collaborators.length > 0 && ( 11 | 12 | A collaboration between 13 | 14 | {collaborators.map((collabData, index) => 15 | [ 16 | (index > 0 && index < collaborators.length - 1) && ", ", 17 | (index === collaborators.length - 1) && ' and ', 18 | 22 | ] 23 | )} 24 | 25 | 26 | )} 27 |

28 |
29 |
30 | ) 31 | } -------------------------------------------------------------------------------- /src/components/collab/show/CollabIssuerInfo.js: -------------------------------------------------------------------------------- 1 | import { PATH } from '../../../constants' 2 | import { walletPreview } from '../../../utils/string' 3 | import { Button, Primary } from '../../button' 4 | import styles from '../styles.module.scss' 5 | 6 | export const CollabIssuerInfo = ({address}) => { 7 | return ( 8 |
9 | 10 | {walletPreview(address)} 11 | 12 | {/* Some kind of dropdown of collaborators info */} 13 |
14 | ) 15 | } -------------------------------------------------------------------------------- /src/components/collab/show/CollabParticipant.js: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react" 2 | import { PATH } from "../../../constants" 3 | import { Link } from 'react-router-dom' 4 | import { GetUserMetadata } from "../../../data/api" 5 | import styles from '../styles.module.scss' 6 | 7 | export const CollabParticipant = ({ collabData }) => { 8 | 9 | const [meta, setMeta] = useState({}) 10 | 11 | useEffect(() => { 12 | GetUserMetadata(collabData.address) 13 | .then(({ data }) => setMeta(data)) 14 | }, [collabData.address]) 15 | 16 | return ( 17 | {meta.alias || collabData.address} 18 | ) 19 | } -------------------------------------------------------------------------------- /src/components/feed-item/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { PATH } from '../../constants' 3 | import { Padding } from '../layout' 4 | import { Button } from '../button' 5 | import { ItemInfo } from '../item-info' 6 | import { renderMediaType } from '../media-types' 7 | import { VisuallyHidden } from '../visually-hidden' 8 | import styles from './styles.module.scss' 9 | 10 | export const FeedItem = (props) => { 11 | return ( 12 | 13 | 26 |
27 | 28 |
29 |
30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/components/feed-item/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | @import '../../styles/layout.scss'; 3 | 4 | .container { 5 | position: relative; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/feedback/index.js: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react' 2 | import { motion, AnimatePresence } from 'framer-motion' 3 | import { HicetnuncContext } from '../../context/HicetnuncContext' 4 | import { Loading } from '../loading' 5 | import { Button, Purchase } from '../button' 6 | import { fadeIn } from '../../utils/motion' 7 | import styles from './styles.module.scss' 8 | 9 | export const FeedbackComponent = () => { 10 | const context = useContext(HicetnuncContext) 11 | const { visible, message, progress, confirm, confirmCallback } = 12 | context.feedback 13 | 14 | return ( 15 | 16 | {visible && ( 17 | 18 |
19 | {progress && } 20 |
{message}
21 | 22 | {confirm && ( 23 |
24 | 27 |
28 | )} 29 |
30 |
31 | )} 32 |
33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /src/components/feedback/styles.module.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | width: 100%; 6 | height: 100%; 7 | background-color: var(--background-color); 8 | z-index: 900; 9 | 10 | display: flex; 11 | align-items: center; 12 | justify-content: center; 13 | 14 | .content { 15 | color: var(--text-color); 16 | min-width: 300px; 17 | display: flex; 18 | align-items: center; 19 | flex-direction: column; 20 | 21 | .message { 22 | display: flex; 23 | align-items: center; 24 | justify-content: center; 25 | flex-direction: column; 26 | margin: 20px 0 50px 0; 27 | 28 | & > * { 29 | margin-bottom: 1rem; 30 | } 31 | } 32 | 33 | .buttons { 34 | display: flex; 35 | align-items: center; 36 | justify-content: center; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/components/footer/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { ButtonLanguage } from '../button-language' 3 | import { ButtonTheme } from '../button-theme' 4 | import { getLanguage } from '../../constants' 5 | import styles from './styles.module.scss' 6 | 7 | export const Footer = () => { 8 | const language = getLanguage() 9 | 10 | return ( 11 |
12 |
13 |
{language.footer.mint}
14 |
15 | {false && } 16 | 17 |
18 |
19 | 20 | {false && ( 21 |
22 |
{language.footer.warning}
23 |
24 | )} 25 |
26 | ) 27 | } 28 | -------------------------------------------------------------------------------- /src/components/footer/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | @import '../../styles/layout.scss'; 3 | 4 | .container { 5 | position: absolute; 6 | bottom: 0; 7 | left: 0; 8 | width: 100%; 9 | background-color: var(--text-color); 10 | color: var(--background-color); 11 | transition: background-color #{$theme-duration} ease-out, 12 | color #{$theme-duration} ease-out; 13 | padding: $mobile-padding; 14 | display: flex; 15 | align-items: center; 16 | flex-direction: column; 17 | 18 | & > * { 19 | display: flex; 20 | align-items: center; 21 | width: 100%; 22 | } 23 | 24 | .copy, 25 | .buttons, 26 | .warning { 27 | width: 100%; 28 | } 29 | 30 | .copy { 31 | & > * { 32 | margin-right: 1rem; 33 | } 34 | } 35 | 36 | .buttons { 37 | display: flex; 38 | align-items: center; 39 | justify-content: flex-end; 40 | width: 25%; 41 | 42 | & > * { 43 | margin-left: 1rem; 44 | } 45 | } 46 | .warning { 47 | display: flex; 48 | align-items: center; 49 | justify-content: flex-start; 50 | line-height: 1em; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/components/header/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | @import '../../styles/layout.scss'; 3 | 4 | .container { 5 | position: fixed; 6 | width: 100%; 7 | height: 60px; 8 | padding: 0 #{$mobile-padding}; 9 | background-color: var(--background-color); 10 | color: var(--text-color); 11 | transition: background-color #{$theme-duration} ease-out, 12 | color #{$theme-duration} ease-out; 13 | z-index: 1000; 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | 18 | .content { 19 | width: 100%; 20 | display: flex; 21 | align-items: center; 22 | justify-content: space-between; 23 | 24 | @include respond-to('desktop') { 25 | width: 50%; 26 | margin: 0 auto; 27 | } 28 | 29 | .logo { 30 | display: flex; 31 | align-items: center; 32 | justify-content: center; 33 | height: 22.5px; 34 | 35 | svg { 36 | height: 22.5px; 37 | // fill: var(--text-color); 38 | transition: fill #{$theme-duration} ease-out; 39 | } 40 | 41 | img { 42 | width: auto; 43 | height: 37px; 44 | } 45 | } 46 | 47 | .right { 48 | display: flex; 49 | align-items: center; 50 | 51 | & > * { 52 | display: flex; 53 | align-items: center; 54 | font-size: 16px; 55 | } 56 | 57 | .hamburger { 58 | width: 30px; 59 | height: auto; 60 | margin-left: 10px; 61 | } 62 | } 63 | } 64 | } 65 | 66 | .menu { 67 | position: fixed; 68 | top: 60px; 69 | left: 0; 70 | right: 0; 71 | bottom: 0; 72 | background-color: var(--background-color); 73 | color: var(--text-color); 74 | transition: background-color #{$theme-duration} ease-out, 75 | color #{$theme-duration} ease-out; 76 | z-index: 1000; 77 | 78 | .content { 79 | display: flex; 80 | justify-content: flex-end; 81 | 82 | ul { 83 | margin-top: 100px; 84 | list-style: none; 85 | 86 | li { 87 | font-size: 30px; 88 | text-align: right; 89 | 90 | /* &:first-of-type { 91 | text-decoration: line-through; 92 | } */ 93 | 94 | & > * { 95 | font-size: inherit; 96 | } 97 | } 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/components/icons/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { motion } from 'framer-motion' 3 | import styles from './styles.module.scss' 4 | 5 | const transition = { 6 | duration: 0.5, 7 | ease: [0.43, 0.13, 0.23, 0.96], 8 | } 9 | 10 | export const Menu = ({ isOpen = false }) => { 11 | const variant = isOpen ? 'opened' : 'closed' 12 | 13 | const top = { 14 | closed: { 15 | rotate: 0, 16 | translateY: 0, 17 | }, 18 | opened: { 19 | rotate: 45, 20 | translateY: 3, 21 | }, 22 | } 23 | const center = { 24 | closed: { 25 | opacity: 1, 26 | }, 27 | opened: { 28 | opacity: 0, 29 | }, 30 | } 31 | const bottom = { 32 | closed: { 33 | rotate: 0, 34 | translateY: 0, 35 | }, 36 | opened: { 37 | rotate: -45, 38 | translateY: -3, 39 | }, 40 | } 41 | const lineProps = { 42 | strokeWidth: 2, 43 | vectorEffect: 'non-scaling-stroke', 44 | initial: 'closed', 45 | animate: variant, 46 | transition, 47 | } 48 | 49 | return ( 50 |
51 | 56 | 64 | {true && ( 65 | 73 | )} 74 | {true && ( 75 | 83 | )} 84 | 85 |
86 | ) 87 | } 88 | -------------------------------------------------------------------------------- /src/components/icons/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | 3 | .menu { 4 | margin-left: 6px; 5 | // border: 1px dashed black; 6 | 7 | svg { 8 | display: block; 9 | width: 30px; 10 | height: 30px; 11 | 12 | line { 13 | stroke: var(--text-color); 14 | transition: stroke #{$theme-duration} ease-out; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/components/identicons/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/variables.scss'; 2 | 3 | .identicon { 4 | svg { 5 | border-radius: 100%; 6 | padding: 1px; 7 | width: 127.5px; 8 | height: 127.5px; 9 | //border: 1px solid var(--text-color); 10 | transition: border-color #{$theme-duration} ease-out; 11 | 12 | path { 13 | stroke: var(--text-color); 14 | fill: var(--text-color); 15 | transition: all #{$theme-duration} ease-out; 16 | } 17 | } 18 | 19 | img { 20 | border-radius: 100%; 21 | padding: 1px; 22 | width: 127.5px; 23 | height: 127.5px; 24 | //border: 2px solid var(--text-color); 25 | transition: border-color #{$theme-duration} ease-out; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/input/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styles from './styles.module.scss' 3 | 4 | export const Input = ({ 5 | type = 'text', 6 | placeholder = 'placeholder', 7 | name = 'input-name-not-set', 8 | min, 9 | max, 10 | maxlength = 500, 11 | label, 12 | onChange = () => null, 13 | onBlur = () => null, 14 | onWheel = () => null, 15 | disabled, 16 | value, 17 | pattern, 18 | onKeyPress 19 | }) => ( 20 |
21 | 38 |
39 | ) 40 | 41 | export const Textarea = ({ 42 | type = 'text', 43 | placeholder = 'placeholder', 44 | name = 'input-name-not-set', 45 | min, 46 | max, 47 | maxlength = 5000, 48 | label, 49 | onChange = () => null, 50 | onBlur = () => null, 51 | disabled, 52 | value, 53 | }) => ( 54 |
55 |